我有一个清单清单:
lists = [[1,4,3,2,4], [4,5]]
我想整理此列表并删除所有重复项;或者换句话说,应用集合并集操作:
desired_result = [1, 2, 3, 4, 5]
最简单的方法是什么?
Answers:
set.union
做你想要的:
>>> results_list = [[1,2,3], [1,2,4]]
>>> results_union = set().union(*results_list)
>>> print(results_union)
set([1, 2, 3, 4])
您也可以使用两个以上的列表进行此操作。
union()
仅支持2.6或更高版本的Python的多个参数。你似乎在此之前使用的版本,所以你可能需要使用一个明确的循环:total = set(); for x in results_list: total.update(x)
(S /; / \ n /)
results_union = set.union(*(set(el) for el in results_list))
TypeError: descriptor 'union' requires a 'set' object but received a 'list'
(至少在Python 3.6中)。
set.union(*results_list)
,则手动绑定方法描述符,即results_list
以“ self”的第一个元素形式发送。这带来了一些怪异的限制:1.不能正确地转储类型(现在第一个元素必须是集合或集合子类的实例),并且2.空联合results_list
将是一个错误(错误结果-应该返回空组)。
itertools
包装中。
itertools.chain
顺便说一下,在Python 2.4中也可以正常工作。
您也可以遵循这种风格
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']
我使用以下方法进行交集,从而避免了集的使用。
a, b= [[1,2,3], [1,2]]
s = filter( lambda x: x in b, a)
要么,
s = [ x for x in b if x in a ]