【发布时间】:2019-12-18 14:15:02
【问题描述】:
我正在尝试在包含 dna 代码的列表中查找特定序列(字母已转换为数字,例如 A=1,T=4)。
例如:
dna = [1,4,3,2,3,2,1,2,3,2,4,2,1,2,2,2,2,4,1,3,4]
查看前 3 个项目 (1,4,3) 并检查项目是否为 2,2,4。如果为 True,则获取位置(在此 0、1、2 中为 False)。否则查看接下来的 3 个项目 2,3,2 并重复。对 dna [] 中的所有位置执行此操作
我的方法是一个 for i in range 循环,它应该给我位置 dna[15,16,17] 但它不会...
A,G,C,U = 1,2,3,4
dna = []
for _ in range(200): #just generated random 200 numbers as example dna
code = random.randrange(1,5,1)
dna.append(code)
l = int(len(dna)/3) #splits search into 3
for i in range(l):
k = i*3
if dna[k] == 2:
if dna[k+1] == 2:
if dna[k+2] == 4:
m += 1
print('GGU at:', dna[i], dna[i+1], dna[k+2], 'found:', m)
我从 SOF 上的类似问题中尝试了很多不同的想法,但大多数人都不关心数字的顺序......有时伪位置是项目 2、2、4,有时它不会找到任何比赛。 我们将不胜感激!
【问题讨论】:
-
224 可以出现在不是 3 的倍数的位置
-
Related。关于这个问题有大量文献;如果您这样做不是为了好玩,您可能会更好地使用现有工具之一。
-
另一个快速的解决方案是将
dna和子模式转换为strings并运行re.finall。如果您只测试少数几种模式,这将非常有效。 -
如果您仍需要帮助,我可以回复other question。
标签: python python-3.x list