2016-09-28 6 views
1

Ich habe ein Tupel von Arrays wie folgt aus:for-Schleife über Tupel in Python: Valueerror

z = (array([ [1], [2], [3]]), 
    array([[10],[11],[12]]) 
    ) 

Ich möchte Schleife mit zwei Variablen über sie mit einem einfachen iterieren:

for x, y in z: 
    print("it worked") 
    self.doStuff(x, y) 

... aber es wirft den Fehler:

ValueError: too many values to unpack (expected 2) 

ich diesen Fehler gegoogelt haben. Viele scheinen die .split() - Methode oder .items() vorzuschlagen. Ich bin mir nicht wirklich sicher, wo ich diese hinzufügen soll, da sie nicht zu Tupeln gehören. Wie kann ich diese for-Schleife richtig ausführen? Danke für Ihre Hilfe.

+0

Ich nehme an, Sie versuchen, über die Arrays' Elemente zu durchlaufen, nicht über die Elemente des Tupels, nicht wahr? Wenn dies der Fall ist, sollten Sie Ihre Datenstrukturen überdenken - eine Iteration über ein einzelnes 2-Tupel-Entpacken von 2 Werten führt zu einem einzigen Durchlauf, bei dem Sie die 2 vollständigen Arrays aus dem Tupel entpacken. – jbndlr

Antwort

2

die andere Antwort lesen es sein könnte, dass ich falsch verstanden, was Sie wollen.

Sie können auch

for x,y in zip(*z): 

verwenden, um die z Tupel zu entpacken.

Der Ausgang ist dann:

it worked 
[1] [10] 
it worked 
[2] [11] 
it worked 
[3] [12] 
2

Die Linie

for x, y in z: 

(zumindest in python2.7) geht davon aus, dass jedes Element in z kann tuple unpacked sein. Dies wäre der Fall, wenn jedes Element in z ist, sagen wir, ein Paar Tupel:

In [23]: for x, y in [(1, 2), (3, 4)]: 
    ...:  pass 
    ...: 

Für Ihren Fall könnte es sein, dass man einfach

x, y = z 

wollen?

Das funktioniert bei mir:

In [19]: z = (array([ [1], [2], [3]]), 
    ...:  array([[10],[11],[12]]) 
    ...: ) 

In [20]: x, y = z 

In [21]: x 
Out[21]: 
array([[1], 
     [2], 
     [3]]) 

In [22]: y 
Out[22]: 
array([[10], 
     [11], 
     [12]])