如何在核苷酸列表中标记目标序列AGC的对应位置?
标记核苷酸列表中所有"AGC"序列的最优实现方法
给定两个列表:
- 核苷酸序列列表:
nucleotides = ['A', 'G', 'C', 'T', 'A', 'G', 'G', 'A', 'G', 'C']
- 初始全0的标记列表,用于标记对应位置的核苷酸是否被"AGC"序列覆盖:
flag_map = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
需求是将所有连续出现的"AGC"序列对应的三个位置标记为1,最终得到:
flag_map = [1, 1, 1, 0, 0, 0, 0, 1, 1, 1]
最优实现思路
直接遍历核苷酸列表的有效索引范围(从0到len(nucleotides)-3),逐个检查连续三个元素是否匹配"AGC",若匹配则将对应三个位置的标记设为1。这种方法时间复杂度为O(n),仅需一次遍历,空间复杂度为O(1)(直接修改原标记列表),是效率最高的实现方式。
Python代码实现
nucleotides = ['A', 'G', 'C', 'T', 'A', 'G', 'G', 'A', 'G', 'C'] flag_map = [0] * len(nucleotides) # 遍历所有可能的起始索引 for i in range(len(nucleotides) - 2): if nucleotides[i] == 'A' and nucleotides[i+1] == 'G' and nucleotides[i+2] == 'C': flag_map[i] = 1 flag_map[i+1] = 1 flag_map[i+2] = 1 print(flag_map) # 输出: [1, 1, 1, 0, 0, 0, 0, 1, 1, 1]
补充说明
- 遍历范围设置为
range(len(nucleotides)-2)是为了保证i+2不会超出列表索引边界; - 若存在重叠的匹配场景,该代码依然能正确标记所有对应位置;
- 代码逻辑清晰,易于维护和修改,可快速适配其他三核苷酸序列的标记需求。
内容的提问来源于stack exchange,提问作者neodeep
相关产品推荐
相关产品推荐

