2016-05-22 21 views
2

Ich versuche, die ersten drei Elemente aus numbers zu extrahieren, und ordnen sie drei verschiedene Variablen wie folgt:Extrahieren von Elementen aus einer Liste und Zuweisen von ihnen zu Variablen

numbers = [1,2,3,4,5,7,8,9,10] 
[first_item, second_item, third_item] = numbers 

Warum bin ich diesen Fehler ?

Traceback (most recent call last): 
    File "test.py", line 2, in <module> 
    [first_item, second_item, third_item] = numbers 
ValueError: too many values to unpack 

Antwort

7

die richtige Weg ist -

[first_item, second_item, third_item] = numbers[:3] 

da Sie suchen nur die ersten drei Elemente zuweisen, der Fehler kommt, weil die anderen Elemente in der Liste Konto für die Ungleichheit auf beiden Seiten als Signierung

8

Sie vergeben nicht wie in einer Liste zu ihnen, und Sie müssen den Rest des Auspackens auf Ihre Liste zu handhaben - Ihre Fehlermeldung mehr Werte zu entpacken sind, als Sie Variablen anzeigt, dass dort haben zuweisen zu. Eine Möglichkeit, dies ändern können, ist durch die Zuordnung der übrigen Elemente in der Liste auf eine rest Variable mit dem * auspacken Operator

numbers = [1,2,3,4,5,7,8,9,10] 
first_item, second_item, third_item, *rest = numbers 

Beachten Sie, dass diese seit Python nur möglich ist, 3, siehe PEP 3132 - Extended Iterable Unpacking,

+1

Ich mag diese tatsächlich besser als das Aufschneiden ich vorgeschlagen, weil die OP w/o Ändern Sie den Code auf der rechten Seite des Gleichheitszeichens eine vierte Term auf der linken Seite hinzufügen könnte (Performance beiseite) . – roadrunner66

4

Sie ordnen 3 Nummern eine Liste von 10 Nummern zu, was mehrdeutig ist. Slicing helfen:

a,b,c = numbers[:3] 
Verwandte Themen