2015-04-20 27 views
0

我無法抓住如何在嵌套for循環時正確輸出正確的輸出順序。嵌套for循環 - 獲取正確的訂單

我有一個整數列表:

[7, 9, 12] 

並與DNA序列數據線一個.txt。

>Ind1 AACTCAGCTCACG 
>Ind2 GTCATCGCTACGA 
>Ind3 CTTCAAACTGACT 

我試圖使嵌套的for循環中,取第一個整數(7),經過的文本行,並打印在每個線位置7的charachter。然後取下一個整數,並在每一行的位置9處打印每個字符。

with (Input) as getletter: 
    for line in getletter: 
     if line [0] == ">": 

      for pos in position: 
       snp = line[pos] 
       print line[pos], str(pos) 

當我運行上面的代碼,我得到了我想要的數據,但在錯誤的順序,就像這樣:

A 7 
T 9 
G 12 
T 7 
A 9 
G 12 
T 7 
C 9 
A 12 

我想是這樣的:

A 7 
T 7 
T 7 
T 9 
A 9 
C 9 
G 12 
G 12 
A 12 

我懷疑這個問題可以通過改變代碼的縮進來解決,但是我無法做到。

------編輯--------

我試圖左右交換兩個循環,但我顯然沒有得到這個更大的圖片給我相同的(錯誤)結果如上。

with (Input) as getsnps: 
    for line in getsnps: 
     if line[0] == ">": 
      hit = line 
     for pos in position: 
       print hit[pos], pos 
+0

您的打印語句將不**生成第一個輸出;它會打印'A 7','T 9'等,所以字母和位置被交換。 –

+0

我刪除了'python-3.x'標籤;您在這裏使用Python 2,正如「print」是一個聲明所證明的那樣。 –

+0

你如何從'[7,9,12]'列表到'31'和'119'的位置? – abarnert

回答

1

試圖回答:

with (Input) as getletter: 
    lines=[x.strip() for x in getLetter.readlines() if x.startswith('>') ] 
    for pos in position: 
     for line in lines: 
      snp = line[pos] 
      print ("%s\t%s" % (pos,snp)) 

文件被讀並緩存到一個數組(行,丟棄文件不開始>) 我們然後遍歷位置則線和打印預期結果。

請注意,你應該檢查你的偏移不大於你的線。

替代而不列表解析(將使用更多的內存,尤其是如果你有很多的無用線(即不以「>」)

with (Input) as getletter:  
    lines=getLetter.readlines() 
    for pos in position: 
     for line in lines: 
      if line.startswith('>'): 
       snp = line[pos] 
       print ("%s\t%s" % (pos,snp)) 

替代另一個存儲(假定位置較小,輸入大)

with (Input) as getletter: 
    storage=dict() 
    for p in positions: 
     storage[p]=[] 
    for line in getLetter: 
     for p in positions: 
      storage[p]+=[line[pos]] 
for (k,v) in storage.iteritems(): 
    print ("%s -> %s" % (k, ",".join(v)) 

如果位置包含的值大於線的尺寸較大,使用line[p]將觸發異常(IndexError),您可以將其接住或測試它

try: 
    a=line[pos] 
except IndexError: 
    a='X' 

if pos>len(line): 
    a='X' 
else: 
    a=line[pos] 
+0

假設「位置」很小,您也可以將字符存儲在這些位置而不是所有行中。 –

+0

@布魯斯,你能告訴我如何做同樣的事情,但沒有列表理解(我認爲就是這樣),因爲我還不熟悉這些(對此還是很新的)?另外,你能否詳細說明偏移量大於線的含義? – Hjalte

+0

@hjalte:做了替代方案(和@tobias_k提出的方案) – Bruce