Python 如何从多个列表中获取重复的值?

Python 如何从多个列表中获取重复的值?,python,list,Python,List,我在python中有几个列表,我只想获取每个列表中的值,是否有任何函数可以直接执行 例如,我有: {'a','b','c','d','e'},{'a','g','c','d','h','e'}, {'i','b','m','d','e','a'} 我想列一个清单,其中包含 {'a','d','e'} 但我不知道我实际上有多少个列表,因为它取决于值“i” 谢谢你的帮助 如果元素是唯一且可散列的(结果中的顺序无关紧要),则可以使用交集:例如: common_elements = list(se

我在python中有几个列表,我只想获取每个列表中的值,是否有任何函数可以直接执行

例如,我有:

{'a','b','c','d','e'},{'a','g','c','d','h','e'}, {'i','b','m','d','e','a'}
我想列一个清单,其中包含

{'a','d','e'}
但我不知道我实际上有多少个列表,因为它取决于值“i”


谢谢你的帮助

如果元素是唯一且可散列的(结果中的顺序无关紧要),则可以使用交集:例如:

 common_elements = list(set(list1).intersection(list2).intersection(list3))
这在功能上等同于:

 common_elements = list( set(list1) & set(list2) & set(list3) )
运算符仅适用于集合,而
交叉
方法适用于任何iterable

如果您有一个列表列表,并且希望所有列表都相交,则可以轻松地执行此操作:

 common_elements = list( set.intersection( * map(set, your_list_of_lists) ) )
特别感谢DSM指出这一点

或者您可以使用一个循环:

 common_elements = set(your_list_of_lists[0])
 for elem in your_list_of_lists[1:]:
     common_elements = common_elements.intersection(elem)  #or common_elements &= set(elem) ...
 else:
     common_elements = list(common_elements)
请注意,如果您确实希望获得它们在原始列表中的顺序,可以使用简单的排序:

common_elements.sort( key = lambda x, your_list_of_lists[0].index(x) )

通过构造,这里没有出现
值错误的风险。

您需要从第一个列表中创建集合,然后使用集合的
.intersection()
方法

a, b, c = ['a','b','c','d','e'], ['a','g','c','d','h'], ['i','b','m','d','e']
exists_in_all = set(a).intersection(b).intersection(c)
已更新。
根据mgilson的评论进行简化。

只需在表格上添加一行:

l=['a','b','c','d','e'],['a','g','c','d','h'], ['i','b','m','d','e']  
reduce(lambda a, b: a & b, map(set, l))  

它将为您提供列表中的commeen元素

['a', 'e', 'd']

您选择元素的标准是什么?'e'和'a'不在您所展示的所有列表中(列表并不是这样展示的)无需先将
b
c
放入集合中。
list(set.intersection(*map(set,s))
?@DSM——非常棒。我要补充一点。(比我的减少暴行要好得多)——我没有意识到,
intersection
可以接受多个参数。谢谢,这正是我想要的!现在只需点击一下版主工具(+1)--你的reduce比我的要好:)我想:reduce终于有了用处了!。但是还有DSM和他的
set.intersection(*map(set,l))
。是的,我也这么想。我开始认为
reduce
是非常无用的(我甚至比大多数pythonists更喜欢
map
filter
等函数式编程工具)。。。
from operator import and_

import operator
a = [['a','b','c','d','e'],['a','g','c','d','h','e'], ['i','b','m','d','e','a']]
print list(reduce(operator.and_, map(set, a)))
['a', 'e', 'd']