Сравнение значений в двух списках в 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."