Сравнение значений в двух списках в Python
в Python 2.7, у меня есть два списка целых чисел:
x = [1, 3, 2, 0, 2]
y = [1, 2, 2, 3, 1]
Я хочу создать третий список, который указывает, является ли каждый элемент x
и y
идентично, чтобы дать:
z = [1, 0, 1, 0, 0]
как я могу это сделать, используя понимание списка?
моя попытка:
z = [i == j for i,j in ...]
но я не знаю как ее заполнять.
3 ответов
вы ищете zip
z = [i == j for i,j in zip(x,y)]
но лучше добавить int
вызов, чтобы получить желаемый результат
>>> z = [int(i == j) for i,j in zip(x,y)]
>>> z
[1, 0, 1, 0, 0]
, иначе вы получите список типа [True, False, True, False, False]
As ajcr упоминает в комментарий, лучше использовать itertools.izip вместо zip, если списки очень длинные. Это связано с тем, что он возвращает итератор вместо списка. Об этом говорится в документация
как zip () кроме что он возвращает итератор вместо списка.
демо
>>> from itertools import izip
>>> z = [int(i == j) for i,j in izip(x,y)]
>>> z
[1, 0, 1, 0, 0]
вы можете изменить его немного и делать:
[x[i] == y[i] for i in xrange(len(x))]
Если вы используете Python3-change xrange
to range
в то время как понимание списка было указано в вопросе, и ответы выше, вероятно, лучше, я думал, что я подключусь к рекурсивному решению:
def compare_lists(a, b, res=[]):
if len(a) == len(b):
if a == []:
return res
else:
if a[0] == b[0]:
res.append(1)
else:
res.append(0)
return compare_lists(a[1:], b[1:])
else:
return "Lists are of different length."