比较Python中两个列表中的值

Kar*_*rus 8 python list-comprehension list python-2.7

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

x = [1, 3, 2, 0, 2]
y = [1, 2, 2, 3, 1]
Run Code Online (Sandbox Code Playgroud)

我想创建一个第三列表,其指示是否在各元件xy是相同的,以产生:

z = [1, 0, 1, 0, 0]
Run Code Online (Sandbox Code Playgroud)

如何使用列表理解来完成此操作?

我的尝试是:

z = [i == j for i,j in ...]
Run Code Online (Sandbox Code Playgroud)

但我不知道如何完成它.

Bha*_*Rao 22

你在找 zip

z = [i == j for i,j in zip(x,y)]
Run Code Online (Sandbox Code Playgroud)

但您最好添加int调用以获得所需的输出

>>> z = [int(i == j) for i,j in zip(x,y)]
>>> z
[1, 0, 1, 0, 0]
Run Code Online (Sandbox Code Playgroud)

否则你会得到一个像这样的清单 [True, False, True, False, False]


正如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]
Run Code Online (Sandbox Code Playgroud)

  • 一个小脚注:如果列表很长,可能值得使用“itertools.izip”而不是“zip”来避免构造长元组列表。当然,Python 3 不存在这个问题。 (2认同)