动态比较常见事件列表

时间:2018-08-12 21:51:24

标签: python python-3.x

我想动态地使用集合在列表中查找共同的整体。如果我有一个列表列表,其中可以包含任意数量的列表,该如何查找所有列表中的所有常见事件。我曾考虑过枚举列表并将每个嵌套列表存储在其自己的变量中,但是我不确定如何比较所有单个列表。

列表示例:

l = [[1,2,3,4,], [3,6,4,2,1], [6,4,2,6,7,3]]

我想做这样的事,但要动态,以便它可以接受任意数量的列表:

common = set(l[0]) & set(l[1]) & set(l[2])  

3 个答案:

答案 0 :(得分:3)

reducelambda一起使用

>>> l = [[1,2,3,4,], [3,6,4,2,1], [6,4,2,6,7,3]]
>>> from functools import reduce
>>> common = reduce(lambda l1,l2: set(l1) & set(l2), l)
>>> print(common)
{2, 3, 4}

或者,作为@tobias_k解决方案的略微修改版本(如注释中所指出的那样),您可以在不使用lambda的情况下进行操作

>>> common = reduce(set.intersection, [set(l[0])] + l[1:]))

答案 1 :(得分:3)

您可以使用set.intersection

set.intersection(*(set(ls) for ls in l)) #evaluates to {2, 3, 4}

答案 2 :(得分:0)

您可以使用reduce包中的functools

from functools import reduce

l = [[1, 2, 3, 4], [3, 6, 4, 2, 1], [6, 4, 2, 6, 7, 3]]

print(reduce(set.intersection, map(set, l)))

输出

{2, 3, 4}