Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何在三个列表中查找公共值_Python_Python 2.7_Python 3.x - Fatal编程技术网

Python:如何在三个列表中查找公共值

Python:如何在三个列表中查找公共值,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,我尝试为三个不同的列表找到共同的值列表: a = [1,2,3,4] b = [2,3,4,5] c = [3,4,5,6] 当然,我会尝试使用和运算符,但这样我只会得到表达式中最后一个列表的值: >> a and b and c out: [3,4,5,6] 查找通用值列表的任何简短方法: [3,4] 溴 这是一个快速而简单的解决方案。如果a中的条目位于b和c中,则这将构建一个包含a中条目的列表out 对于较大的列表,您需要查看@poke使用集合提供的答案: >>

我尝试为三个不同的列表找到共同的值列表:

a = [1,2,3,4]
b = [2,3,4,5]
c = [3,4,5,6]
当然,我会尝试使用
运算符,但这样我只会得到表达式中最后一个
列表
的值:

>> a and b and c
out: [3,4,5,6]
查找通用值列表的任何简短方法:

[3,4]

这是一个快速而简单的解决方案。如果
a
中的条目位于
b
c
中,则这将构建一个包含
a
中条目的列表
out

对于较大的列表,您需要查看@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))


如果类型很重要,不要忘记将结果转换为列表!
from functools import reduce
reduce(np.intersect1d, (array1, array2, array3))
new_array = np.intersect1d(array1, array2)
np.intersect1d(new_array, array3)