2010-08-02 7 views
11

Ich versuche, den folgenden Code in einer Liste von Listen zu verwenden, um eine neue Liste von Listen zu erstellen, deren neue Elemente eine bestimmte Kombination von Elementen aus den Listen innerhalb der sind alte Liste ... wenn das irgendeinen Sinn ergibt! Hier ist der Code:Liste der Listen und "Zu viele Werte zum Entpacken"

for index, item in outputList1: 
    outputList2 = outputList2.append(item[6:].extend(outputList1[index+1][6:])) 

Allerdings bekomme ich einen Fehler "zu viele Werte zu entpacken". Ich scheine sogar den Fehler mit dem folgenden Code zu bekommen:

for index, item in outputList1: 
     pass 

Was könnte ich falsch machen?

+3

'enumerate' fehlt, das heißt für den Index, Artikel in enumerate (otputList1): – doug

+0

Auch meine Syntax in der ersten Zeile nicht korrekt ist, brauche ich nur: outputList2.append (Artikel [6:]. Verlängern (outputList1 [index + 1] [6:])) Schon lange mit C gearbeitet! – Bitrex

+0

In Python3 können Sie 'für index, * Element in outputList1'. Dann hat 'index' das erste Element und' item' hat den Rest. –

Antwort

18

die for Anweisung iteriert über eine iterable - im Falle einer Liste, ist es, den Inhalt iteriert, eins nach dem anderen Daher ist in jeder Iteration ein Wert verfügbar.

Wenn Sie for index, item in list: verwenden, versuchen Sie, einen Wert in zwei Variablen zu entpacken. Dies würde mit for key, value in dict.items(): funktionieren, die über die Dicts-Schlüssel/Werte in beliebiger Reihenfolge iteriert. Da Sie einen numerischen Index scheinen zu wollen, gibt es eine Funktion enumerate(), die den Wert eines iterable wird, sowie einen Index für es:

for index, item in enumerate(outputList1): 
    pass 

edit: da der Titel Ihrer Frage erwähnt Liste der Listen ', Ich sollte darauf hinweisen, dass, wenn Sie über eine Liste iterieren, das Entpacken in mehr als eine Variable funktioniert, wenn jedes Listenelement selbst iterabel ist. Zum Beispiel:

list = [ ['a', 'b'], ['c', 'd'] ] 
for item1, item2 in list: 
    print item1, item2 

erhalten Sie folgende Ausgabe:

 
a b 
c d 

wie erwartet. Dies funktioniert in ähnlicher Weise wie bei dicts, nur Sie können zwei, drei oder so viele Elemente in den enthaltenen Listen haben.

+0

So funktioniert die Iteration über ein Diktat nicht. Probieren Sie es in einem Terminal und Sie werden blah nicht iterable bekommen, wo Blah ist die Klasse des Schlüssels. Was Sie denken, ist für Schlüssel, Wert in dict.items(): aber das ist kein Standardverhalten, wie Sie gesagt haben. – Amoss

+0

Ich bekomme den gleichen Fehler beim Durchlaufen einer Liste, die ein Tupel enthält: 'lst = [('a', 'b')] für Schlüssel, Wert in lst:' Könnte es sein, weil BOM-Unicode mein erstes Zeichen einträgt Tupel? –

+0

@HrvojeT welche Version von Python?Es funktioniert gut für mich - wenn es eine Stückliste in einer der Strings gab, dann sollte es nicht die Iterabilität des Tupels beeinträchtigen –

9

Sie haben enumerate zu verwenden vergessen, meinen Sie, dies zu tun:

for index,item in enumerate(outputList1) : 
    pass 
+0

Whoops, also tat ich! Vielen Dank! – Bitrex

Verwandte Themen