在多个列表中查找通用值

时间:2019-07-25 22:12:24

标签: 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]

预计输出为

[3, 4]

我的问题是,列表的数量没有给出并且没有固定。可以是大约20个长度不同的列表(例如[a,b,c,d,e,g,...,l])

我已经看到使用set(a)&set(b)&set(c)的答案,但是我不确定如何在我的情况下应用它。

3 个答案:

答案 0 :(得分:3)

您可以使用地图和set.intersection

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

答案 1 :(得分:1)

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}

答案 2 :(得分:1)

我不确定您为什么要避免循环,因为这确实是您要的-遍历列表列表并保留唯一值集。

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对所包含的每个元素应用交集-结果是所有列表共有元素的单个集合。