2016-04-13 41 views
0

dışında dize indeksi Ben şu kod: aralık

import sys 

from collections import defaultdict 

filename = sys.argv[1] 

g = defaultdict(list) 

l = 0 

with open(filename) as graph_file: 
    for line in graph_file: 
     for pos in line: 
      g[l].append(pos[0]) 
      g[l].append(pos[1]) 

      g[l+1].append(pos[1]) 
      g[l+1].append(pos[2]) 

     l = l+1 

for i in g.keys(): 
    if '\n' in g[i]: 
     g[i].remove('\n') 

for i in g.keys(): 
    print (i, g[i]) 

Ben programını çalıştırmak için cmd kullandığınızda, ben hata şu var ve Nedenini anlamıyorum. aralık

ben dışarı dize endeksi: g [l] .Append (poz [1]) IndexError içinde Dosya "test.py", satır 15:

traceback (son En son çağrı) Ne anlama geldiğini biliyorum, ama neden olduğunu anlayamıyorum. Ben açmaya çalışıyorum metin dosyası şudur:

ATA 
GTG 
TAC 
ACC 
AAG 
CCA 
TGG 
GTA 
TAT 
ATG 
TGT 
AGT 
GGA 
GAC 
ACT 
CTT 
TTC 
CAA 
TCA 
CAT 
+0

'baskı pos' çıktısı nedir. İlk sıranın bir boşluk ya da bir şey olabileceği gibi görünüyor. – Bahrom

+0

PyCharm'ın Debugger aracı gibi bir Debugger kullanmayı öğrenmeyi önereceğim. Programda hata ayıklamanın nasıl yapılacağını öğrenmek, probleminizin nerede olduğunu anlamanıza ve dolayısıyla bir çözüm bulmanıza yardımcı olacaktır. – Rafael

cevap

2

Sizin sorun olduğunu, aslında ilk satırı alarak for pos in 'ATA' üzerinde döngü zaman for pos in line ile size döngü bitti. Böylece, pos ilk olarak 'A''a atanır ve 2. maddeye erişmeye çalıştığınızda bir hatayı tetikler - bir kez çok fazla döngü halindesiniz.

Bunun yerine, aşağıdaki için kodunuzu değiştirin:

import sys 

from collections import defaultdict 

filename = sys.argv[1] 

g = defaultdict(list) 

l = 0 

with open(filename) as graph_file: 
    for line in graph_file: 
     g[l].append(line[0]) 
     g[l].append(line[1]) 
     g[l+1].append(line[1]) 
     g[l+1].append(line[2]) 

     l = l+1 

for i in g.keys(): 
    if '\n' in g[i]: 
     g[i].remove('\n') 

for i in g.keys(): 
    print (i, g[i]) 

bash-3.2$ python foo.py foo.txt 
(0, ['A', 'T']) 
(1, ['T', 'A', 'G', 'T']) 
(2, ['T', 'G', 'T', 'A']) 
(3, ['A', 'C', 'A', 'C']) 
(4, ['C', 'C', 'A', 'A']) 
(5, ['A', 'G', 'C', 'C']) 
(6, ['C', 'A', 'T', 'G']) 
(7, ['G', 'G', 'G', 'T']) 
(8, ['T', 'A', 'T', 'A']) 
(9, ['A', 'T', 'A', 'T']) 
(10, ['T', 'G', 'T', 'G']) 
(11, ['G', 'T', 'A', 'G']) 
(12, ['G', 'T', 'G', 'G']) 
(13, ['G', 'A', 'G', 'A']) 
(14, ['A', 'C', 'A', 'C']) 
(15, ['C', 'T', 'C', 'T']) 
(16, ['T', 'T', 'T', 'T']) 
(17, ['T', 'C', 'C', 'A']) 
(18, ['A', 'A', 'T', 'C']) 
(19, ['C', 'A', 'C', 'A']) 
(20, ['A', 'T']) 
bash-3.2$ 
+0

Teşekkür ederim Ne demek istediğimi anladım :) Yine de, şimdi programı çalıştırdığımda yeni bir hata alıyorum ve bunun dosyayı okuduğum veya açtığım şekilde yapması gerektiğini düşünüyorum ama bence bilmiyorum. düzeltmek için ..: NameError: name 'ATA' tanımlı değil ATA, txt dosyamın ilk satırı. –