我有一个列表,其中包含1-5个列表。我想只返回所有列表中出现的值。我可以轻松地为它创建一个例外,只有一个列表,但是当有多个(未知数量)列表时,我想不出一种方法。例如:
[[1,2,3,4],[2,3,7,8],[2,3,6,9],[1,2,5,7]]
只返回2,因为它是唯一出现在所有子列表中的列表项
我怎样才能做到这一点?
答案 0 :(得分:4)
reduce(set.intersection, (set(x) for x in [[1,2,3,4],[2,3,7,8],[2,3,6,9],[1,2,5,7]]))
答案 1 :(得分:1)
如果您愿意,可以使用frozenset.intersection
(或set.intersection
):
>>> l = [[1,2,3,4],[2,3,7,8],[2,3,6,9],[1,2,5,7]]
>>> frozenset.intersection(*(frozenset(x) for x in l))
frozenset({2})
如果您希望将结果作为列表而不是集合,请添加对列表的调用。
答案 2 :(得分:0)
我建议这个解决方案:
s = [[1,2,3,4],[2,3,7,8],[2,3,6,9],[1,2,5,7]]
#flatten the list
flat = sum(s,[])
#only keep digits that appear a certain number of times (size of s)
filtered = filter(lambda x: flat.count(x) == len(s),flat)
# clear repeated values
list(set(filtered))
有更好的方法可以做到这一点,但这个更明确。