Сравнение двух двумерных списков - PullRequest
0 голосов
/ 27 марта 2012

Мне было интересно, как бы я сравнил два двухцветных списка по их расположению.Например, у меня есть два двухмерных списка с 0 и 1, и я хочу создать функцию, которая возвращала бы True, если 1 находится в одном и том же месте в обоих списках.

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

, но это, вероятно, не правильно.

Ответы [ 3 ]

1 голос
/ 27 марта 2012
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)
)
0 голосов
/ 27 марта 2012

Это выглядит хорошо для меня, хотя вы не учитываете, что две записи также равны 0.

Возможно, вы также захотите использовать фактическую длину списков.Поэтому вместо

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

предполагается, что списки будут иметь одинаковый размер.

Убедитесь, что вы также возвращаете false в конце функции (поскольку она не добралась бы до этоголиния, если произошло столкновение)

0 голосов
/ 27 марта 2012

Если collide(a,b) должен возвращать True, если все соответствующие элементы одинаковы, и False в противном случае, тогда вы бы хотели, чтобы внутри вашего вложенного цикла было:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...