Сравнить списки по индексам
Есть два списка 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 шт):
Для вашего примера подойдёт:
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('один из списков закончился')
А можно красиво, с помощью zip:
for i, j in zip(a, b):
print(i == j)
Вывод:
True
True
False
True
True
True
Про zip в документации.
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))))
Дальше насколько фантазии хватит.