修改Python函数 实现DNA序列中多个碱基的位置查找
修改Python函数实现多碱基位置查找
问题背景
现有DNA序列碱基查找函数仅支持匹配单个碱基,示例DNA序列定义如下:
dna = ['A', 'G', 'C', 'G', 'T', 'A', 'G', 'T', 'C', 'G', 'A', 'T', 'C', 'A', 'A', 'T', 'T', 'A', 'T', 'A', 'C', 'G', 'A', 'T', 'C', 'G', 'G', 'G', 'T', 'A', 'T']
原有函数代码:
def position(list, value): pos = [] for n in range(len(list)): if list[n] == value: pos.append(n) return pos
需要调整函数逻辑,支持同时传入多个碱基(如'A'、'T'),返回所有匹配碱基的索引位置,同时兼容原有单碱基查询的调用方式,避免影响已有代码。
修改方案
核心调整是把单值相等判断改为集合成员判断,同时做输入兼容,修改后代码如下:
def position(dna_list, targets): pos = [] # 兼容单碱基、多碱基两种输入格式,统一转为集合做匹配 if isinstance(targets, str): target_bases = {targets} else: target_bases = set(targets) # 用enumerate直接获取索引和对应碱基,写法更简洁 for idx, base in enumerate(dna_list): if base in target_bases: pos.append(idx) return pos
使用方式
- 单碱基查询(和原有函数调用逻辑完全一致):
# 查找所有A的位置 print(position(dna, 'A')) - 多碱基查询:
# 查找所有A和T的位置 print(position(dna, ['A', 'T']))
优化说明
- 用集合存储待匹配碱基,成员判断效率更高,长序列下性能优势明显
- 兼容原有单碱基查询的调用方式,不需要修改之前已经写好的调用代码
- 用
enumerate替代原有的下标遍历写法,代码可读性更好
内容的提问来源于stack exchange,提问作者DelRae Steiner
相关产品推荐
相关产品推荐

