枚举,打印上一个

Enumerate, print previous

我有一本看起来像这样的字典:

{'NM_014043': [(0, 34), (13176, 13268), (18191, 18386), (22352, 22455), (25881, 25988), (26189, 26300)],

和一个包含仓位的文件,例如:

isoform    pos_rein
NM_014043    13177

我的脚本如下所示:

import csv
with open('splicing_reinitialized.txt') as f:
    reader = csv.DictReader(f,delimiter="\t")
    for row in reader:
        pos = row['pos_rein']
        name = row['isoform']
        ppos1 = int(pos)
        if name in exons:
            y = exons[name]
            for i, (low,high) in enumerate(exons[name]):
                if low -3 <= ppos1 <= high + 6:
                    exonnumber = i+1
                    values = (low,high)
                    print values

我的问题是我的 values 变量打印了它关联的当前数字集(在本例中为 (13176, 13268)),但我想做的是打印之前的数字 (0, 34)该职位关联的号码。反正有没有容易做这样的事情?

只在循环中存储当前数字; next 迭代它们将是以前的值,直到您再次分配:

previous = None
for i, (low,high) in enumerate(exons[name]):
    if low -3 <= ppos1 <= high + 6:
        exonnumber = i+1
        print previous
        previous = low, high

像这样?

previous_values = exons[name][i-1]

请注意,Martijn 的解决方案更优雅地处理第一个值(previous == None 而不是必须检查 i==0)。

首先你可以改变这行(更透明):

y = exons[name]
for i, (low,high) in enumerate(y)

然后您将获得带有 y[i-1] 的前一个元素以供进一步处理和打印,例如:

print y[i-1]