从未知数量的python列表返回匹配

时间:2010-09-01 10:43:46

标签: python

我有一个列表,其中包含1-5个列表。我想只返回所有列表中出现的值。我可以轻松地为它创建一个例外,只有一个列表,但是当有多个(未知数量)列表时,我想不出一种方法。例如:

[[1,2,3,4],[2,3,7,8],[2,3,6,9],[1,2,5,7]]

只返回2,因为它是唯一出现在所有子列表中的列表项

我怎样才能做到这一点?

3 个答案:

答案 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))

有更好的方法可以做到这一点,但这个更明确。