2012-03-26 4 views
0

Мне было интересно, как бы я сравнивал два 2-мерных списка по их местоположению. Например, у меня есть два 2-мерных списка с 0 и 1, и я хочу создать функцию, которая вернет True, если 1 находится в одном месте в обоих списках.Сравнение двух 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) должен возвращать Правда, если все соответствующие элементы одинаковы, и значение False в противном случае, то вы хотите, если внутри вас вложенный цикл, чтобы быть:

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

Затем, после внешнего цикла, вы может return True (так как к этому моменту вы проверили все элементы, и ни одно из них не было несоответствием).

+0

Подождите, но я не ищу, чтобы проверить, 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) 
) 
Смежные вопросы