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

在python中迭代两个2D列表的元素并打印差异,python,python-2.7,Python,Python 2.7,我有两个二维列表: list1 = [[]] list2 = [[]] 在一个循环中,我遍历一堆寄存器,进行写操作,然后进行读回操作,得到填充的列表 list1.append([regName,writeValue]) list2.append([regName,readValue]) 现在我想比较这两个列表,以确保来自寄存器的回读值与我编写的值相同。为此,我正在做类似的事情: for (x,i),(y,j) in itertools.izip(list1,list2): if [x

我有两个二维列表:

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:需要超过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.izip(列表1,列表2)中(x,i)、(y,j)的
>:
如果[x][i]!=[y] [j]:
打印“不匹配!”
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
对于itertools.izip(列表1,列表2)中的(x,i)、(y,j):
ValueError:需要0个以上的值才能解包

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

1:您以空列表开始
list1
list2
的方式是导致错误的原因

2:这不是你唯一的问题

修复列表分配代码并运行它时,将出现以下错误:

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

您只是想知道它们是否不相同,还是需要知道不相同的特定索引?我想知道与regName对应的哪些特定索引不相同,以及预期值和实际值是什么。我不这么认为,因为我的列表已完全填充。我打印并测试了它。
for x,y in zip(list1,list2):
    if x is not y:
        # do what you want here