2012-03-26 153 views
0

我想知道如何通過它們的位置來比較兩個二維列表。例如,我有兩個2-dim列表,其中0和1,我想創建一個函數,如果1在兩個列表中的相同位置,則返回True。比較兩個二維列表

List1=[[0,0,0], 
     [1,0,0], 
     [0,0,1]] 

List1=[[0,0,0], 
     [1,0,0], 
     [0,0,0]] 

這是我開始的,但我不知道如何繼續。

def collide(a,b): 
    for x in range(3): 
     for y in range(3): 
collide(List1, List2) 

任何提示?我在想

if a[x][y]==1 and b[x][y]==1: 
    return True 

但這可能是不正確的。

回答

0

對我來說這看起來不錯,儘管你沒有考慮到兩個入口都是0。

您可能還想使用列表的實際長度。所以相反

for x in range(len(a)): 
    for y in range(len(a[x])): 
     ... 

這假定列表將具有相同的大小。

確保您也是在函數結束返回false(因爲它會不會得到該行是否有衝突)

+0

噢,謝謝你的幫助。 – bahaaz 2012-03-26 23:55:09

0

如果如果所有對應的元素是相同的collide(a,b)應該返回true,否則爲false,那麼你想要的,如果你裏面嵌套循環是:

if a[x][y] != b[x][y]: 
    return False 

然後,外環後,你可以return True(因爲到那時候,你已經檢查過所有元素,而且沒有一個是不匹配的)。

+0

等待,但我不希望檢查2個列表是相同的或不相同的。只要列表中元素的位置與另一列表中的元素的位置相同即可。 – bahaaz 2012-03-26 23:52:19

1
any(
    cell_1 and cell_2 
    for row_1, row_2 in zip(list_1, list_2) 
    for cell_1, cell_2 in zip(row_1, row_2) 
)