我有一个列表列表:
lists = [[1,4,3,2,4], [4,5]]
我想展平此列表并删除所有重复项;或者,换句话说,应用集合联合操作:
desired_result = [1, 2, 3, 4, 5]
最简单的方法是什么?
set.union
做你想做的事:
>>> results_list = [[1,2,3], [1,2,4]]
>>> results_union = set().union(*results_list)
>>> print(results_union)
set([1, 2, 3, 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']
列表不支持联合,列表是有序的,但集合支持。查看set.union。
以理解的方式:
[*{ j for i in lists for j in i }]
或者
[*functools.reduce(lambda x,y: {*x, *y}, lists)]
我使用以下来做交叉点,这避免了对集合的需要。
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 ]
desired_result = [x for y in lists for x in y]