我有以下代码,其中frag是一个字符串列表,按顺序切割(按顺序)DNA序列数据:
for a in frag:
length_fragment = len(a)
if (a[0:5] == 'CCAGC') and (a[-1:] == 'C'):
total_length.append(length_fragment)
但是我想跳到for循环中的下一个a并查看下一个片段的第一个字母是否是CCAGC ...这在python中是否可行。
所以我想将a [-1:] =='C'更改为下一个[0:5] =='ACGAG'的参数。关键词是for循环中的下一个。所以我想在for循环中简要地跳过。
答案 0 :(得分:1)
for a, next_a in zip(frag, frag[1:]):
如果frag很大,使用itertools.islice代替[1:]
答案 1 :(得分:1)
使用continue
跳过for
循环的其余部分,然后在下一次迭代开始时重新启动。
答案 2 :(得分:0)
(我不是100%明确你的意图,所以我会解释:你想找到以CCAGC开头的序列,但只有当以下序列以ACGAG开头时才会出现。在那个假设上......)
如果方便的话,将数据存储为包含所有序列的单个字符串,每行一个,然后使用正则表达式:
ccagc_then_acgag = re.compile('(CCAGC.*)\n(?=ACGAG)')
sum( len(seq) for seq in ccagc_then_acgag.findall(sequences) )
我不能说这是否比迭代字符串列表更快或更慢(正则表达式库有一些很好的优化,整个循环在本机代码中运行,但字符串列表的优点是不必扫描整行以找到ACGAG匹配),但值得测试。