2017-05-07 7 views
-4

zu erhalten Ich erhalte einen Index außerhalb des Bereichs Fehler, wenn ich diesen Code ausführen. es funktioniert, wenn tmp> 3 und wenn tmp [2] == tmp [3]. Ich versuche zu schreiben die Zahlen in Index [0], wenn die Bedingungen erfüllt sind. aka tmp [0] == tmp [1]. Warum kann ich tmp [0] nicht aufrufen, egal was ich versucht habe.Python. Versucht Index [0] == Index [1]

i = 0 
tmp = [] 
while(i < len(sequence)): 
    tmp = sequence[i].replace("(","").replace(")","").split(",") 
    if(len(tmp) > 1): 
     if(tmp[0] == tmp[1]): 
      print tmp[0] 
      with open(output_file1, 'a') as output: 
       output.write(str(tmp[0]) + '\n') 
i = i+1 
return True 

python app.py 
Traceback (most recent call last): 
File "app.py", line 71, in <module> 
generate(6, out_path2,out_path1, out_path) 
File "app.py", line 45, in generate 
random6th = random.choice(sequence2).replace("[", "").replace("]","").replac 
e("'","").replace(" ","") 
File "C:\Python27\lib\random.py", line 275, in choice 
return seq[int(self.random() * len(seq))] # raises IndexError if seq is emp 
ty 
IndexError: list index out of range 

i = 0 
tmp = [] 
while(i < len(sequence)): 
    tmp.append(sequence[i].replace("(","").replace(")","").split(",")) 
    if(len(tmp) > 0): 
     if(tmp[0] == tmp[1]): 
      print tmp[0] 
      with open(output_file1, 'a') as output: 
       output.write(str(tmp[0]) + '\n') 
i = i+1 
return True 

Traceback (most recent call last): 
File "app.py", line 69, in <module> 
generate_2(seq_path, out_path1, out_path2); 
File "app.py", line 20, in generate_2 
if(tmp[0] == tmp[1]): 
IndexError: list index out of range 

Mit dem zweiten Code, den ich eine weitere Zurückverfolgungsfehlermeldung anzeigt, bei if (tmp [0] == tmp [1] Mit PRINT tmp [0], läuft nie mit zweitem Code Zurückverfolgungs der oben genannten Fehler Cuz.

Eine Sequenz sieht wie folgt aus

(8, 16, 5, 5, 65, 27) 
(7, 15, 4, 4, 64, 26) 
(21, 17, 12) 
(22, 22, 11, 11, 59, 24) 
(21, 21, 10, 9, 58, 23) 

ich versuche, 21 und 21 tmp übereinstimmen [0] == tmp [1] und dann schreiben 21.

+0

können Sie die genaue Rückverfolgung teilen? –

+0

Können Sie uns nach der Zuweisung auch eine Ausgabe von 'print (tmp)' geben? – AetherUnbound

+1

'sequence [i] .replace (" ("," "). Replace (") "," "). Split (", ")' das sieht aus wie ein armer Mann 'ast.literal_eval' –

Antwort

0

Sie Einstellungen in einer Datei tmp = [] vor Ihrer while Schleife, aber Sie ordnen es dann jedes Mal neu, wenn Sie in der Schleife sind. Ihr Code sollte stattdessen sein:

i = 0 
tmp = [] 
while(i < len(sequence)): 
    tmp.append(sequence[i].replace("(","").replace(")","").split(",")) 
    if(len(tmp) > 1): 
     if(tmp[0] == tmp[1]): 
      print tmp[0] 
      with open(output_file1, 'a') as output: 
       output.write(str(tmp[0]) + '\n') 

Dies könnte Ihre Probleme lösen.

+0

eine Liste an eine Liste anhängen ist wahrscheinlich nicht das, was das OP will –

+0

Da 'sequence [i]' sieht aus wie ein Element in a Liste, würde es ein Element der Sequenz anhängen (die in diesem Kontext eine Zeichenfolge zu sein scheint). – AetherUnbound

0

Ok, es sieht aus wie die Daten in einer Liste von Strings ist (vorausgesetzt, dass Sie String-Methoden aufrufen), so mit dieser Annahme, dies sollte funktionieren:

# sequences = \ 
# """(8, 16, 5, 5, 65, 27) 
# (7, 15, 4, 4, 64, 26) 
# (21, 17, 12) 
# (22, 22, 11, 11, 59, 24) 
# (21, 21, 10, 9, 58, 23)""" 
# sequences = sequences.split('\n') 

# Alternatively, if the data is within a textfile called sequence.txt 
with open(os.path.join(home_dir, 'sequence.txt'), 'r') as infile: 
    sequences = infile.read().splitlines(keepends=False) 

output_file1 = 'good_sequences.txt' 

# assuming you were using mode='a' only because open was called each iteration, otherwise change to 'a' 
with open(output_file1, 'w') as outfile: 
    for sequence in sequences: 
     seq_data = sequence.replace('(', '').replace(')', '').replace(' ', '').split(',') 
     if seq_data and len(seq_data) > 2: 
      if seq_data[0] == seq_data[1]: 
       print(seq_data[0]) 
       # didn't see a need to cast as str 
       outfile.write(seq_data[0] + '\n') 

Der Ausgang wird sein:

+0

dieser Code arbeitet mit ihm arbeiten, aber, sequenzen = os.path.join (home_dir, 'sequenz.txt') im verwenden und es wird nicht drucken seq_data [0] – nerdboy

+0

Überprüfen Sie die bearbeitete Version. Ist das besser? – TSeymour

+0

das letzte gibt nichts aus, um eine Datei auszugeben oder zu drucken seq_data [0], no print no output tho – nerdboy

0

einfachste weise ich löste das war ändern int (tmp [0]) == int (tmp [1]) hat der Trick jetzt wunderbar funktioniert.

Verwandte Themen