You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在核苷酸列表中标记目标序列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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:10:29