比较Python中两个列表中的值

时间:2015-10-07 15:25:48

标签: python list python-2.7 list-comprehension

在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 ...]

但我不知道如何完成它。

3 个答案:

答案 0 :(得分:22)

您正在寻找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中提及comment,如果列表很长,最好使用itertools.izip而不是zip。这是因为它返回迭代器而不是列表。这在documentation

中提到
  

与zip()类似,但除外,它返回迭代器而不是列表。

演示

>>> from itertools import izip
>>> z = [int(i == j) for i,j in izip(x,y)]
>>> z
[1, 0, 1, 0, 0]

答案 1 :(得分:3)

您可以稍微更改一下并执行:

[x[i] == y[i] for i in xrange(len(x))]

如果您使用Python3 - 将xrange更改为range

答案 2 :(得分:1)

虽然在问题中指定了列表理解,并且上面的答案可能更好,但我认为我会使用递归解决方案:

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."