枚举,打印前一个

时间:2015-07-27 14:20:45

标签: python enumerate

我有一个字典,看起来像这样:

{'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

我的问题是我的值变量打印了它与之关联的当前数字集(在本例中为(13176,13268)),但我想要做的是打印以前的数字(0,34)而不是与位置相关联的数字。反正这样做容易吗?

3 个答案:

答案 0 :(得分:2)

只需将当前数字存储在循环中; 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

答案 1 :(得分:1)

喜欢这个吗?

previous_values = exons[name][i-1]

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

答案 2 :(得分:1)

首先,您可以更改此行(以使其更透明):

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

然后你将得到y [i-1]的前一个元素用于进一步处理和打印例如:

print y[i-1]