2013-05-13 29 views
0

的元素我有两个二维表:遍历两个2D名单在Python和打印的区别

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

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

+0

你只是想弄明白,如果他们不一样,或者你需要知道特定的索引是不是? – 2013-05-13 22:08:19

+0

我想知道与regName对应的具体索引不同,以及期望值和实际值是什么。 – serendipity 2013-05-13 22:19:25

回答

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是创建两个空的名单?这可能会导致问题。

+0

我不这么认为,因为我的清单完全填充。我打印并测试它。 – serendipity 2013-05-13 22:24:30

0

1:你开始的方式list1list2与一个空的列表是什么导致你的错误!

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

当您解决您的列表分配的代码并运行它,您将收到以下错误:

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

这是因为在你for loop,你正在你的变量xiyj是在元素列表并尝试为它们编制索引,而且你不能这样做。我真的不知道你使用的语法是否可以...下面将做你想要的:

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