比较 Python 中两个列表中的值

Comparing values in two lists in Python

在 Python 2.7 中,我有两个整数列表:

x = [1, 3, 2, 0, 2]
y = [1, 2, 2, 3, 1]

我想创建第三个列表,它指示 xy 中的每个元素是否相同,以产生:

z = [1, 0, 1, 0, 0]

我如何使用列表理解来做到这一点?

我的尝试是:

z = [i == j for i,j in ...]

但是我不知道怎么完成。

您正在寻找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]

的列表

作为ajcr mentions in a , it is better to use itertools.izip instead of zip if the lists are very long. This is because it returns an iterator instead of a list. This is mentioned in the documentation

Like zip() except that it returns an iterator instead of a list.

演示

>>> 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 - 将 xrange 更改为 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."