2012-03-26 2 views
0

두 개의 2 차원 목록을 위치별로 비교하는 방법이 궁금합니다. 예를 들어, 0과 1의 두 개의 2-dim리스트가 있는데, 1이 두리스트의 같은 위치에 있으면 True를 반환하는 함수를 만들고 싶습니다.두 개의 2 차원 목록 비교

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])): 
     ... 

목록의 크기가 같다고 가정합니다.

(가 그 라인 못했을 때문에 충돌이 있다면)

+0

오, 도움 주셔서 감사합니다. – bahaaz

0

해당하는 모든 요소가 같은 경우 collide(a,b) True를 반환해야하는 경우, 당신은 중첩 루프로 내부의 경우 그렇지 않으면 False, 당신이 원하는 것 :

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

그런 다음, 외부 루프 후, 당신은 수 있습니다 return True (그 시점까지, 당신은 모든 요소를 ​​확인했습니다 그리고 그들 중 누구도 불일치했다).

+0

기다립니다 당신은 또한 함수의 끝에서 false를 반환 있는지 확인합니다,하지만 난 여부를 확인하기 위해 찾고 있지 않다 2 개의 목록은 동일하거나 또는 동일하지 않습니다. 목록에있는 요소의 위치가 다른 목록의 요소와 동일하면됩니다. – bahaaz

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) 
)