這是我正在做的事:爲什麼這個循環不能正常工作? (Python)
有兩個文件,我比較。
因此,有兩個文件包含與該突變相關的突變名稱和編號爲aapos
的編號。
在文件1中,有t
個突變和在文件2中,有s
個突變。
現在,文件編號2中的突變具有特定的生物學意義,所以我試圖做的是查看文件1中的突變名稱(在我的程序中稱爲tagname
)是否等同於文件2中的標記名,以及該特定突變的aapos數是否落入文件編號2中的aapos1和aapos2的範圍內。
如果滿足這兩個條件,那麼文件1中的突變具有特殊的生物學意義,讓我們打電話它屬於第1類,否則它屬於第2類,這沒有生物學意義。
此外,在這些文件中,有一個名爲synonymous
列和文件各1突變,同義列分配若干0或1
現在,這是我想做的對於屬於CATEGORY 2的每個突變,如果該突變的synonymous
列爲0,我希望計數器nonsyntwo
加1,如果它是1,那麼我希望計數器syntwo
加1.實質上,對於所有屬於類別2的突變,我想要在synonymous
列中有多少具有指定值0的計數以及具有指定值1的有多少個。
但是,當程序運行時,我最終得到一個nonsyntwo
和syntwo
的數字,這比我正在使用的文件中的標記名的數量要多得多。如果我要將s
和t
更改爲15(每個文件中有成千上萬的標記名),那麼我將得到94作爲nonsyntwo
的值。
如果程序迭代了15個標記名,這怎麼可能?
for x in range(1,s):
for b in range (1,t):
if tagname1[x]== tagname2[b]:
if int(aapos1[b]) <= int(aapos[x])<= int(aapos2[b]):
snps = snps + 1
elif int(synonymous[x]) == 0:
nonsyntwo = nonsyntwo + 1
elif int(synonymous[x]) == 1:
syntwo = syntwo + 1
elif tagname1[x]!= tagname2[b]:
if int(synonymous[x]) == 0:
nonsyntwo = nonsyntwo + 1
elif int(synonymous[x]) == 1:
syntwo = syntwo + 1
您意識到在範圍(1,s):for範圍(1,t):...中的x for x的代碼正在運行(s -1)\ *(t-1)次,而不是s + t,對嗎? – jwodder
是的,我知道。 – bioprogrammer
那麼爲什麼當's'和't'是15令人驚訝時'nonsyntwo'的值爲94? – jwodder