我有一个字典,看起来像这样:
{'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)而不是与位置相关联的数字。反正这样做容易吗?
答案 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]