2013-05-13 31 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