You need to enable JavaScript to run this app. Python入门:按A=T、C=G规则过滤DNA字符串列表的实现问题
优惠活动
大模型
产品
解决方案
定价
更多

Python入门:按A=T、C=G规则过滤DNA字符串列表的实现问题

问题根源

你的代码输出和目标不匹配的核心问题,出在列表推导式的返回值设计上:

  • 推导式循环遍历range(len(dna))得到的变量i是原DNA列表的整数索引
  • 最终推导式收集的元素是索引i本身,没有取索引对应的序列内容,所以输出自然全是数字
最小改动修正

只需要把推导式中要收集的元素从索引i,换成对应位置的序列值dna[i]即可:

# 修正前(错误写法,收集索引)
# dna_2 = [i for i in range(len(dna)) if (dna[i].count('A'))== (dna[i].count('T')) and (dna[i].count('C'))== (dna[i].count('G'))]

# 修正后(正确写法,收集对应序列)
dna_2 = [dna[i] for i in range(len(dna)) if dna[i].count('A') == dna[i].count('T') and dna[i].count('C') == dna[i].count('G')]

修改后运行,dna_2就会直接存储符合规则的DNA字符串,输出形式和你预期的['AACTGACTTG', ...]完全一致。

更简洁的优化写法

不需要借助索引遍历原列表,直接循环取出每个序列对象做判断,代码可读性和健壮性更高:

dna_2 = [
    seq for seq in dna
    if seq.count('A') == seq.count('T') and seq.count('C') == seq.count('G')
]
  • 省去了range(len())的绕弯操作,不需要通过索引间接取值
  • 循环变量seq直接对应单个DNA序列,判断条件的代码逻辑更直观,也能减少索引写错的低级错误

内容的提问来源于stack exchange,提问作者Marta Fredes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 09:15:03