创建多个列表中所有值的并集的Pythonic方式

122 投票
7 回答
72606 浏览
提问于 2025-04-15 18:34

我有一个包含多个列表的列表:

lists = [[1,4,3,2,4], [4,5]]

我想把这个列表变成一个单一的列表,并且去掉所有重复的元素;换句话说,就是进行一个集合合并的操作:

desired_result = [1, 2, 3, 4, 5]

有什么简单的方法可以做到这一点吗?

7 个回答

3

你也可以按照这种风格来做

In [12]: a = ['Orange and Banana', 'Orange Banana']
In [13]: b = ['Grapes', 'Orange Banana']
In [14]: c = ['Foobanana', 'Orange and Banana']

In [20]: list(set(a) | set(b) | set(c))
Out[20]: ['Orange and Banana', 'Foobanana', 'Orange Banana', 'Grapes']

In [21]: list(set(a) & set(b) | set(c))
Out[21]: ['Orange and Banana', 'Foobanana', 'Orange Banana']    
18

看起来你在用 Python 2.5(如果你需要其他版本的答案,最好在提问时说明一下哦;顺便说一下,现在的正式版本是 2.6)。你想要的是一个列表,而不是集合,所以我推荐你使用:

import itertools

...

return list(set(itertools.chain(*result_list)))

itertools 是处理迭代器的一个很棒的工具(也可以用来处理很多种序列或集合),我强烈建议你去了解一下。特别是 itertools.chain 的用法,可以在 这里 找到详细的说明。

209

set.union 这个方法可以满足你的需求:

>>> results_list = [[1,2,3], [1,2,4]]
>>> results_union = set().union(*results_list)
>>> print(results_union)
set([1, 2, 3, 4])

你还可以用这个方法处理多个列表,而不仅仅是两个。

撰写回答