Python中的for-loop over tuple:ValueError

时间:2016-09-28 12:18:18

标签: python for-loop

我有一个如下所示的数组:

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

我想用一个简单的for循环使用两个变量迭代它们:

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

...但它会抛出错误:

ValueError: too many values to unpack (expected 2)

我用Google搜索了这个错误。许多人似乎建议使用.split()方法或.items()。我不确定,在哪里添加,因为不属于元组。如何正确执行此for循环?谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

该行

for x, y in z:

假设(至少在Python2.7中)z中的每个元素都可以是tuple unpacked。如果z中的每个元素都是一对元组,那就是这种情况:

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

对于你的情况,可能只是你想要

x, y = z

这适用于我:

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]])

答案 1 :(得分:2)

读到另一个答案可能是我误解了你想要的东西。

您也可以使用

for x,y in zip(*z):

解压缩z元组。

输出是:

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