【问题标题】:Python if statements moving aheadPython if 语句继续前进
【发布时间】:2012-05-02 02:25:56
【问题描述】:

我有以下代码,其中 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 循环中略过。

【问题讨论】:

  • 我不知道你想说什么。您能否展示示例输入、相应的输出并通过算法进行讨论?

标签: python if-statement for-loop


【解决方案1】:
for a, next_a in zip(frag, frag[1:]):

如果 frag 很大,使用 itertools.islice 代替 [1:] 会更有效

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2022-11-03
        • 2016-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-23
        • 2014-03-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多