以下是我遇到的问题的一个例子:
A = [
[1, 2, 3, 4, 5, 6],
[7, 8, 9, 10, 11, 12],
[13, 14, 15, 16, 17, 18]
]
B = [
['1', '2', '3', '4', '5', '6'],
['7', '8', '9', '10', '11', '12'],
['13', '14', '15', '16', '17', '18']
]
for a, b in A, B:
for ai, bi in a, b:
if ai == int(bi):
print 'it worked!'
此代码在第13行给出了错误:ValueError: too many values to unpack
。
我希望将a
和b
指向6个元素的列表,例如第一次迭代分别为[1, 2, 3, 4, 5, 6]
和['1', '2', '3', '4', '5', '6']
。
我已经尝试过为每个2D数组使用一个迭代器,如上所述,并且我也尝试使用12个变量,以防Python试图将6个元素列表中的每个元素传递给它自己的变量(6个用于a
为b
,a1, ... a6, b1, ... b6
为{{1}},如{{1}}
有人能指出这里发生了什么,或许可以解释如何获得我正在寻找的结果吗?
答案 0 :(得分:3)
你可以这样做:
for a, b in zip(A, B):
if a == map(int, b):
print 'it worked!'
如果您想打印单it worked!
,可以执行以下操作:
if all(a == map(int, b) for a, b in zip(A, B)):
print 'it worked!'
zip
返回长度为两个列表中最小值的对列表,因此它会说它适用于这些:
A = [[1, 2]]
B = [['1', '2'], ['3', '4']]
如果您想避免这种情况,可以import itertools
并将zip
替换为izip_longeset
。
答案 1 :(得分:1)
如果您想同时迭代多个列表,则需要使用zip
(https://docs.python.org/2/library/functions.html#zip):
for a, b in zip(A,B):
# a and b are now the inner lists
print "It worked!"
我不确定你的a == int(b)
声明要达到什么目的,所以我把它遗漏了。