2016-12-05 11 views
0
j = [['4', '5'], ['1', '1'], ['1', '5'], ['3', '4'], ['3', '1']] 
k = [['5', '2'], ['4', '2'], ['2', '4'], ['3', '3'], ['4', '3']] 
t = [] 
indexPointer = 0 

for coord in j: 
    for number in coord: 
     t[indexPointer][0] = number 
     indexPointer += 1 
indexPointer = 0 
for coord in k: 
    for number in coord: 
     t[indexPointer][1] = number 
     indexPointer += 1 
print(t) 

sollte eine Ausgabe:'Indexerror: Listenindex außerhalb des zulässigen Bereichs' bei der Zuordnung

[[4,5],[5,2],[1,4],[1,2],[1,2],[5,4],[3,3],[4,3],[3,4],[1,3]] 

statt i erhalten:

t[indexPointer][0] = number 
IndexError: list index out of range 

Wie kann ich dieses Problem lösen? Ich habe versucht, einen Weg zu finden, aber ohne Glück.

Bearbeiten: Ich habe nicht den gesamten erforderlichen Code enthalten. Es wurde aktualisiert.

Antwort

0

Sie können nicht Index in eine leere Liste, da es nichts gibt. Sie werden entweder Dinge, um es anzuhängen oder es mit leeren Werten prefill, zB:

t = [None] * 10 

Aber auch das wird nicht genau arbeiten, da Sie t erwarten zweidimensional zu sein. Sie können wie so machen ta defaultdict, versuchen:

from collection import defaultdict 
t = defaultdict(dict) 
t[1][0] = 'a' 
+0

Ich habe den Code aktualisiert. Ich war ursprünglich etwas unklar. Vielleicht könntest du mir aufgrund der aktualisierten Frage helfen? –

+0

Das Gleiche gilt. Sie können nicht in eine leere Liste indexieren. Sie müssen entweder ein Wörterbuch erstellen, in das Sie nach Belieben indizieren können, oder es mit leeren Daten füllen. – user3030010

0

Warum sollten diese nicht außer Reichweite sein?

Ihre t Variable ist nur eine leere eindimensionale Liste, auf die Sie zugreifen möchten, als wäre sie zweidimensional.

Ich denke, dass Sie nur versuchen, alles, was in j zu t ist? In diesem Fall könnten Sie nur so etwas tun: t = list(itertools.chain(*j))

Edit: habe gerade bemerkt, jedes Element in einer eigenen Liste ist: t = [[x] for x in itertools.chain(*j)]

+0

Ich habe den Code aktualisiert. Ich war ursprünglich etwas unklar. Vielleicht könntest du mir aufgrund der aktualisierten Frage helfen? –

0

Ich würde den Code von Pythonista geschrieben empfehlen, aber Ihr Code anzupassen, damit es funktioniert:

j = [['4', '5'], ['1', '1'], ['1', '5'], ['3', '4'], ['3', '1']] 
t = [] 

for coord in j: 
    for number in coord: 
     t.append([number]) 

print(t) 
#[['4'], ['5'], ['1'], ['1'], ['1'], ['5'], ['3'], ['4'], ['3'], ['1']] 

Wie Sie looping Durch jedes Element wird die Listenmethode .append auf [number] an das Ende Ihrer Liste t angeheftet.

Sie können diese gleiche verschachtelte Schleife Code erreichen unter Verwendung eines list comprehension:

t = [[number] for coord in j for number in coord] 

Update:

Da Sie Ihre Frage aktualisiert haben:

Sie sollten die zip Funktion in berücksichtigen diese Situation.

t=list(itertools.chain(*zip(j,k))) 

Um den Code von oben zu aktualisieren, wenn Sie eine for Schleife verwenden möchten, aber hier können Sie die Liste .extend Methode verwenden:

j = [['4', '5'], ['1', '1'], ['1', '5'], ['3', '4'], ['3', '1']] 
k = [['5', '2'], ['4', '2'], ['2', '4'], ['3', '3'], ['4', '3']] 
t = [] 

for coord in zip(j,k): 
    t.extend(coord) 

print(t) 
#[['4'], ['5'], ['1'], ['1'], ['1'], ['5'], ['3'], ['4'], ['3'], ['1']] 

Und als Verständnis:

t=[i for coord in zip(j,k) for i in coord] 
+0

Ich habe den Code aktualisiert. Ich war ursprünglich etwas unklar. Vielleicht könntest du mir aufgrund der aktualisierten Frage helfen? –

+0

@NickWright Ich habe meine Antwort basierend auf Ihrem Update aktualisiert – LMc

Verwandte Themen