0

我有两个二维列表:

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

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

4

2 回答 2

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 正在创建两个空列表?这可能是导致问题的原因。

于 2013-05-13T22:11:18.983 回答
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
于 2013-05-13T22:22:08.847 回答