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))