多个索引与python中的for循环匹配

时间:2019-05-05 20:30:36

标签: python

我试图了解python for循环如何迭代。我知道如何使用c ++进行迭代,但是有人要求我用python编写该程序。原谅我对python的了解,但我绝不是该主题的专家。

我已经搜索了许多可能的解决方案,但是,他们没有为我的问题提供实际的指导。这意味着对于编码如何进行一个接一个的迭代并能够匹配3个连续的索引,从来没有任何实际的解释。

for i in range(0, len(dna)):
    if dna[i] == 'A' & dna[i+1] == 'T' & dna[i+2] == 'G':
        protein_sequence[dna[i:i+3]]

//for i in range(0, len(dna)-(3+len(dna)%3), 3):
//    if protein[dna[i:i+3]] == "ATG":
//        protein_sequence += protein[dna[i:i+3]]

if protein[dna[i:i+3]] == "STOP" :
    break
protein_sequence += protein[dna[i:i+3]]

我要做的是迭代并匹配“精确的”三个字符序列。找到序列后,我可以按3的序列进行迭代,直到匹配“停止”序列。注释掉的for循环在找到“开始”触发器以启动for循环方面也无效。预先感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

在Python中,没有诸如多索引匹配之类的东西;如果您需要查找数组中某个元素的周围值,请使用大小为len(pattern)的滑动窗口:

def match(s, pattern):  # returns the FIRST match
  for start in xrange(len(s) - len(pattern)):
    if s[start: start + len(pattern)] == pattern:
      return start

  return None


idx = match(dna, "ATG")
if idx is not None:
  pass  # do something witty with it instead

当然,由于时间O(n^2)的复杂性,它在大数据上的表现很差:您需要采用更快的算法,例如Aho-CorasickKMP

答案 1 :(得分:0)

您可以通过使用split函数将其限制为第一次出现“ atg”然后进行3个字母的循环来简化操作:

dna='cgatgxggctatgaatcttccggtaatg'
z=dna.split('atg',1)

输出:

z
['cg', 'xggctatgaatcttccggtaatg']