关于多个二维列表的Foreach:

时间:2014-09-16 08:53:43

标签: python arrays list iterator

以下是我遇到的问题的一个例子:

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

我希望将ab指向6个元素的列表,例如第一次迭代分别为[1, 2, 3, 4, 5, 6]['1', '2', '3', '4', '5', '6']

我已经尝试过为每个2D数组使用一个迭代器,如上所述,并且我也尝试使用12个变量,以防Python试图将6个元素列表中的每个元素传递给它自己的变量(6个用于aba1, ... a6, b1, ... b6为{{1}},如{{1}}

有人能指出这里发生了什么,或许可以解释如何获得我正在寻找的结果吗?

2 个答案:

答案 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)

如果您想同时迭代多个列表,则需要使用ziphttps://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)声明要达到什么目的,所以我把它遗漏了。