Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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_List - Fatal编程技术网

Python 在多个列表中查找公共值

Python 在多个列表中查找公共值,python,list,Python,List,所以我有数字列表,我想找到所有列表中存在的数字。如果可能的话,我宁愿不使用循环 这里有一个例子 a = [1, 2, 3, 4] b = [2, 3, 4, 5, 6] c = [3, 4, 5, 6, 10, 12] df['A'] = [a, b, c] 预计产量将达到100% [3, 4] 我这里的问题是,列表的数量不是给定的,也不是固定的。它可以是大约20个不同长度的列表(例如[a,b,c,d,e,g,…,l]) 我已经看到了使用集合(a)&集合(b)&集合(c)的答案,但我不确定如

所以我有数字列表,我想找到所有列表中存在的数字。如果可能的话,我宁愿不使用循环

这里有一个例子

a = [1, 2, 3, 4]
b = [2, 3, 4, 5, 6]
c = [3, 4, 5, 6, 10, 12]
df['A'] = [a, b, c]
预计产量将达到100%

[3, 4]
我这里的问题是,列表的数量不是给定的,也不是固定的。它可以是大约20个不同长度的列表(例如[a,b,c,d,e,g,…,l])

我已经看到了使用集合(a)&集合(b)&集合(c)的答案,但我不确定如何将其应用于我的案例。

您可以使用map和:

In [29]: a = [1, 2, 3, 4] 
    ...: b = [2, 3, 4, 5, 6] 
    ...: c = [3, 4, 5, 6, 10, 12]                                                                                                                                                                                                                                                                                             

In [31]: a, b, c = map(set, (a,b,c))                                                                                                                                                                                                                                                                                          

In [32]: a.intersection(b,c)                                                                                                                                                                                                                                                                                                  
Out[32]: {3, 4}
>>> a = [1, 2, 3, 4]
>>> b = [2, 3, 4, 5, 6]
>>> c = [3, 4, 5, 6, 10, 12]
>>> elements_in_all = list(set.intersection(*map(set, [a, b, c])))
>>> elements_in_all
[3, 4]

我不知道你为什么要避免循环,因为那是。。你真正想要的是——在列表上循环,并保持一组唯一的值

l = [a, b, c]
s = None

for e in l:
  if not s:
    s = set(e)
  else:
    s &= set(e)

s => set([3, 4])
您还可以创建不显式使用循环且仍支持任意数量参数的函数版本:

reduce((lambda x,y: x & y), map(set, l))

首先,将包含列表
l
中的每个列表转换为一个集合,然后使用reduce为包含的每个元素应用交集-结果是一个集合,其中包含所有列表共有的元素。

列表是否始终具有唯一的值?e、 它永远不会像
[1,2,2,3]
对。所有不重复的唯一值好吧,你发布的内容正好带来了你想要的:
set(a)&set(b)&set(c)
,带来了
{3,4}
,如果你想把结果作为一个列表,你可以做
list(set(a)&set(b)&set(c))
那么,set()的数量会有所不同。可能是2,或者20,30。每次我写剧本,在我看来,这是个拙劣的骗局。这是关于解析一个整数字符串的2/3和关于集合交集的1/3。噢,谢谢!这解决了我的问题。还原功能很好!此外,我们还可以使用
x | y
而不是
x&y
生成唯一元素集,也可以简洁地编写为
导入操作符;reduce(operator.or,map(set,l))