0

我有以下代码,其中 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' 更改为下一个 a[0:5] =='ACGAG' 的语句。关键字是 for 循环中的下一个 a。所以我想在 for 循环中简单地跳过。

4

3 回答 3

1
for a, next_a in zip(frag, frag[1:]):

如果 frag 很大,使用 itertools.islice 而不是[1:]

于 2012-05-02T02:33:58.930 回答
1

用于continue跳过循环的其余部分for并在下一次迭代的开头重新开始。

于 2012-05-02T02:37:47.533 回答
0

(我不是 100% 清楚你的意图,所以我会解释:你想找到以 CCAGC 开头的序列,但前提是以下序列以 ACGAG 开头。在那个假设下......)

如果方便,将数据存储为包含所有序列的单个字符串,每行一个,然后使用正则表达式:

ccagc_then_acgag = re.compile('(CCAGC.*)\n(?=ACGAG)')
sum( len(seq) for seq in ccagc_then_acgag.findall(sequences) )

我不能说这是否会比迭代字符串列表更快或更慢(正则表达式库有一些很好的优化,整个循环在本机代码中运行,但字符串列表的优点是不必扫描整个行来查找 ACGAG 匹配),但值得测试。

于 2012-05-02T02:43:23.357 回答