比较 Python 中两个列表中的值
Comparing values in two lists in 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 ...]
但是我不知道怎么完成。
您正在寻找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."
在 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 ...]
但是我不知道怎么完成。
您正在寻找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
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."