Сравнить списки по индексам

Есть два списка a = [1, 2, 3, 4, 5, 6] и b = [1, 2, 4, 4, 5, 6]. Требуется сверить списки по индексам. То есть, проверить a[0] == b[0], потом a[1] == b[1], потом a[2] == b[2], и так далее, до последних элементов a[i] и b[i]. Как такое реализовать?


Ответы (3 шт):

Автор решения: Kirill Kondratenko

Для вашего примера подойдёт:

for i in range(6):
    print(a[i] == b[i])

Вывод:

True
True
False
True
True
True

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

for i in range(max(len(a), len(b))):
    try:
        print(a[i] == b[i])
    except IndexError:
        print('один из списков закончился')
→ Ссылка
Автор решения: чистов_n

А можно красиво, с помощью zip:

for i, j in zip(a, b):
    print(i == j)

Вывод:

True
True
False
True
True
True

Про zip в документации.

→ Ссылка
Автор решения: Vladimir Bogdanov

zip обработает количество элементов (точнее пар элементов), равное длине самого короткого списка. Если нужно обработать все элементы самого длинного списка, то используем zip_longest из пакета itertools. Например:

from itertools import zip_longest

a = [1, 2, 3, 4, 5, 6]
b = [1, 2, 4, 4, 5, 6, 7, 8, 9]

print(list(x == y for x, y in zip_longest(a, b, fillvalue=0)))

Параметр "fillvalue" задает значение по умолчанию, которое будет подставлено в короткий список на место недостающих элементов. Вместо просто "0" можно задать формулу или выражение. Например:

print(list(x == y for x, y in zip_longest(a, b, fillvalue=max(a)))
print(list(x == y for x, y in zip_longest(a, b, fillvalue=min[a])))
print(list(x == y for x, y in zip_longest(a, b, fillvalue=a[0])))
print(list(x == y for x, y in zip_longest(a, b, fillvalue=a[-1])))
print(list(x == y for x, y in zip_longest(a, b, fillvalue=sum(a)/len(a))))
print(list(x == y for x, y in zip_longest(a, b, fillvalue= a[-1] if len(a) < len(b) else b[-1])))
print(list(((b[i] if x is None else a[i]) == y) for i, (x, y) in enumerate(zip_longest(a, b, fillvalue = None))))

Дальше насколько фантазии хватит.

→ Ссылка