迭代python中两个2D列表的元素并打印差异

时间:2013-05-13 21:51:12

标签: python python-2.7

我有两个2D列表:

list1 = [[]]
list2 = [[]]

在一个循环中,我遍历一堆寄存器并执行写操作,然后回读操作并获取填充的列表。

list1.append([regName,writeValue])
list2.append([regName,readValue])

现在我想比较这两个列表,以确保寄存器中的回读值与我写的相同。我为此做了类似的事情:

for (x,i),(y,j) in itertools.izip(list1,list2):
    if [x][i] != [y][j]:
        print >> myfile, 'MISMATCH: reg_name = %s, expected_value =0x%x, actual_value =0x%x' % (x,i,j)

这当然是错误的并且给我一个错误ValueError:need more than 0 values to unpack

如何比较两个列表中相同寄存器名称的写入和读取值并打印任何不匹配?

2 个答案:

答案 0 :(得分:0)

我开始使用您的方法并注意到结果:

>>> list1 = [[]]
>>> list2 = [[]]
>>> list1.append(['a',1])
>>> list2.append(['a',2])
>>> list1
[[], ['a', 1]]
>>> list2
[[], ['a', 2]]

然后我进行了比较:

>>> for (x,i),(y,j) in itertools.izip(list1, list2):
        if [x][i] != [y][j]:
            print "Doesn't match!"



Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    for (x,i),(y,j) in itertools.izip(list1, list2):
ValueError: need more than 0 values to unpack

也许itertools正在创建两个空列表?这可能会导致问题。

答案 1 :(得分:0)

1:您使用空列表开始list1list2的方式是导致错误的原因!

2:这不是你唯一的问题!

修复列表分配代码并运行它后,您将收到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
IndexError: list index out of range

这是因为在您的for loop中,您将变量x i y j作为列表中的元素并尝试将其编入索引,你不能这样做。我甚至不确定你使用的语法是否正常......以下将做你想做的事情:

for x,y in zip(list1,list2):
    if x is not y:
        # do what you want here