Ich habe ein Tupel mit einer Zeichenfolge und einer Liste von Zeichenfolgen wie folgt:

test = ('str1',['1', '2'])
for a,b in test:
    print(a,b)

Ich möchte so auspacken, dass ich [('str1', '1'), ('str1', '2')] bekomme.

Ich erhalte jedoch " ValueError: Zu viele Werte zum Entpacken (erwartete 2) ".

Wenn ich die Testlänge drucke, wird sie als 2 angegeben. Ich bin mir also nicht sicher, was hier falsch ist.

1
jincept 20 Aug. 2015 im 23:47

4 Antworten

Beste Antwort

Obwohl test zwei Elemente enthält, versuchen Sie, über Tupel zu iterieren, was nicht funktioniert, da test keine Tupel enthält (es ist selbst ein Tupel).

Das funktioniert also:

test = [('str1',['1', '2'])]
for a,b in test:
    print(a,b)

Oder um zu bekommen, was Sie wollen, als Liste:

print([(test[0], item) for item in test[1]])

Sie können auch folgendermaßen iterieren:

test = ('str1',['1', '2'])
for item in test[1]:
    print(test[0], item)
2
Simeon Visser 20 Aug. 2015 im 20:51

Sie können die Funktion zip verwenden, um Folgendes zu implementieren:

>>> seq = ['1', '2']
>>> print(zip(['str']*len(seq), seq))
[('str', '1'), ('str', '2')]
2
hamidfzm 20 Aug. 2015 im 20:53

"Zu viele Werte zum Auspacken" bedeutet genau das. Schauen wir uns die Elemente in test an:

test = ('str1',['1', '2'])
for a,b in test:
    print(a,b)

Jedes Element in test wird in zwei Variablen entpackt. Das erste Element ist 'str1' und das zweite ist ['1', '2']. 'str1' ist eine Zeichenfolge mit vier Zeichen. Beim Entpacken wären also vier Variablen erforderlich. Sie geben jedoch nur zwei an, a und b. Das ist der Fehler.

Um die gewünschte Ausgabe zu erhalten, empfehle ich, wie folgt zu entpacken:

a,b = test

Jetzt ist a 'str1' und b ist ['1', '2']. Sie können dann die Werte in b durchlaufen:

for item in b:
    print(a, item)

Ergebnis:

str1 1
str1 2
1
TigerhawkT3 20 Aug. 2015 im 20:53

Ihr Code durchläuft jedes Element in test. zuerst 'str1', dann ['1', '2']. Das Problem ist, wenn Sie versuchen, a, b = 'str1' auszuführen (dies ist, was die for -Schleife tut). Es gibt 4 Werte in 'str1', aber nur zwei Variablen, denen Sie sie zuweisen möchten.

Hier ist eine Möglichkeit, das zu tun, was Sie tatsächlich wollen:

test = ('str1',['1', '2'])

test_str, test_list = test

for b in test_list:
    print(test_str, b)

In diesem Code ist test_str 'str1' und test_list ['1', '2']. Dann iterieren Sie über test_list und verweisen einfach auf test_str, um 'str1' zu erhalten.

0
Cyphase 20 Aug. 2015 im 20:51