Python:如何在三个列表中找到共同的值
Python: how to find common values in three lists
我尝试为三个不同的列表找到通用的值列表:
a = [1,2,3,4]
b = [2,3,4,5]
c = [3,4,5,6]
当然,我自然会尝试使用 and
运算符,但是这样我就可以得到表达式中最后一个 list
的值:
>> a and b and c
out: [3,4,5,6]
是否有任何快捷方式可以找到通用值列表:
[3,4]
Br
out = [x for x in a if x in b and x in c]
是一个快速简单的解决方案。如果这些条目在 b
和 c
.
中,这将构建一个列表 out
,其中包含来自 a
的条目
对于更大的列表,你想看看@poke提供的答案
使用集:
>>> a = [1, 2, 3, 4]
>>> b = [2, 3, 4, 5]
>>> c = [3, 4, 5, 6]
>>> set(a) & set(b) & set(c)
{3, 4}
或者按照乔恩的建议:
>>> set(a).intersection(b, c)
{3, 4}
使用集合的好处是你不需要重复迭代原始列表。每个列表迭代一次以创建集合,然后集合相交。
像 Geotob 那样使用过滤列表理解来解决这个问题的天真方法是为 a
的每个元素迭代列表 b
和 c
,因此对于更长的列表,这将效率低很多。
对于那些仍然对这个问题犹豫不决的人,可以使用 numpy:
np.intersect1d(array1, array2)
这适用于列表和 numpy 数组。
它可以在 functools.reduce
的帮助下扩展到更多数组,或者它可以简单地重复几个数组。
from functools import reduce
reduce(np.intersect1d, (array1, array2, array3))
或
new_array = np.intersect1d(array1, array2)
np.intersect1d(new_array, array3)
我尝试为三个不同的列表找到通用的值列表:
a = [1,2,3,4]
b = [2,3,4,5]
c = [3,4,5,6]
当然,我自然会尝试使用 and
运算符,但是这样我就可以得到表达式中最后一个 list
的值:
>> a and b and c
out: [3,4,5,6]
是否有任何快捷方式可以找到通用值列表:
[3,4]
Br
out = [x for x in a if x in b and x in c]
是一个快速简单的解决方案。如果这些条目在 b
和 c
.
out
,其中包含来自 a
的条目
对于更大的列表,你想看看@poke提供的答案
使用集:
>>> a = [1, 2, 3, 4]
>>> b = [2, 3, 4, 5]
>>> c = [3, 4, 5, 6]
>>> set(a) & set(b) & set(c)
{3, 4}
或者按照乔恩的建议:
>>> set(a).intersection(b, c)
{3, 4}
使用集合的好处是你不需要重复迭代原始列表。每个列表迭代一次以创建集合,然后集合相交。
像 Geotob 那样使用过滤列表理解来解决这个问题的天真方法是为 a
的每个元素迭代列表 b
和 c
,因此对于更长的列表,这将效率低很多。
对于那些仍然对这个问题犹豫不决的人,可以使用 numpy:
np.intersect1d(array1, array2)
这适用于列表和 numpy 数组。
它可以在 functools.reduce
的帮助下扩展到更多数组,或者它可以简单地重复几个数组。
from functools import reduce
reduce(np.intersect1d, (array1, array2, array3))
或
new_array = np.intersect1d(array1, array2)
np.intersect1d(new_array, array3)