Я думаю, что лучший способ объяснить мое затруднительное положение - пример. Скажем, у меня есть файл, который содержит следующую информацию:Указание количества чисел для суммирования в цикле
isoform snp_rein
NM_005101 97
NM_005101 144
NM_198576 20790
и словарь, который выглядит так:
exons = {'NM_005101': [(0, 110), (517, 1073)], 'NM_198576': [(0, 251), (2078, 2340), (15154, 15202), (20542, 20758), (21050, 21275), (21355, 21580), (21833, 22040), (23116, 23335), (23415, 23610), (23700, 23901), (23986, 24135), (24211, 24317), (25038, 25155), (25236, 25401), (25610, 25754), (25841, 25966), (26037, 26143), (26274, 26613), (26697, 26835), (27204, 27332), (27450, 27565), (27653, 27773), (27889, 28243), (28744, 28937), (29113, 29329), (29443, 29673), (29780, 29915), (30110, 30207), (30304, 30469), (30603, 30715), (31130, 31247), (31330, 31523), (31605, 31693), (33630, 33855), (34325, 34429), (34701, 35997)]}
Я работаю на некоторый код, который находит, между которыми пара чисел snp_rein
номер вранье. Затем я смог вычислить разницу между максимумом первого набора чисел и min от второго набора чисел и так далее. Мой код, как показано ниже:
totalintron=0
if name in exons:
y = exons[name]
for sd, i in enumerate(exons[name]):
if snpos<=max(i):
exonnumber = sd+1
position = sd
print exonnumber
break
for index in range(len(y) -1):
first_max = max(y[index])
second_min = min(y[index + 1])
intron = second_min - first_max
print intron
totalintron = totalintron + intron
print totalintron
totalintron = 0
Мой выход выглядит так: (**x**
указывает exonnumber
и последняя цифра указывает на общее я хочу изменить):
**1**
407
407
**2**
407
407
**5**
1827
12814
5340
292
80
253
1076
80
90
85
76
721
81
209
87
71
131
84
369
118
88
116
501
176
114
107
195
97
134
415
83
82
1937
470
272
28671
Моя проблема заключается в общей сложности , Я хочу суммировать только количество чисел, указанное в дополнительном номере. Для первого вывода я хотел бы, чтобы итоговое число считалось 0, потому что проверенное число находилось в пределах заданного диапазона для exon 1. Для второго выхода я хочу, чтобы общее число считалось 407, потому что оно было в exon 2. Для последнего вывода I хочу подвести первые 4 цифры, потому что тестируемый номер был в экзоне 5.
Это то, что я хочу, чтобы мой выход выглядеть следующим образом:
**1**
0
**2**
407
**5**
20273
Любые предложения о том, как изменить способ, которым я в общей сложности только для определенного количества чисел, если это имеет смысл? Пожалуйста, объясните, что вы предлагаете, потому что я новичок в Python ...
«который пара чисел число snp_rein лежит.» Можете ли вы пояснить, что это значит? –
Я бы предложил сначала разделить вашу проблему на более мелкие проблемы, которые легче решить/понять/получить помощь. Возможно, начните, потянув каждую петлю в свою собственную функцию? – thebjorn
Также уточните, что именно вы хотите сделать. –