我想动态地使用集合在列表中查找共同的整体。如果我有一个列表列表,其中可以包含任意数量的列表,该如何查找所有列表中的所有常见事件。我曾考虑过枚举列表并将每个嵌套列表存储在其自己的变量中,但是我不确定如何比较所有单个列表。
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])
答案 0 :(得分:3)
将reduce
与lambda
一起使用
>>> 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}