在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 ...]
但我不知道如何完成它。
答案 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."