2012-02-25 45 views
4

我有一個列表l套。要採取一切集合的並在l我做的:服用套裝

union = set() 
for x in l: 
    union |= x 

我有一種感覺,有寫這個的更經濟的/功能性的方式。我能改進嗎?

回答

9

這是我會怎麼做(一些更正爲每評論):

union_set = set() 
union_set.update(*l) 

union_set = set.union(*l) 
+1

'union_set =集()工會(* 1)' – 2012-02-25 23:55:37

+0

謝謝。這個'*'是什麼? – Randomblue 2012-02-25 23:56:35

+2

它將列表擴展爲傳遞給函數或方法的一堆參數。例如,它就像'union_set.union(l [0],l [1],l [2],...)' – 2012-02-25 23:56:43

4

如果你正在尋找一個功能性的方法,有一點比傳統reduce()

>>> reduce(set.union, [ set([1,2]), set([3,4]), set([5,6]) ]) 
set([1, 2, 3, 4, 5, 6]) 

在Python 3.0,reduce可以在the functools module發現;在2.6和2.7中,它既存在於functools中,也存在於內置的舊版解釋器中。

3
union = reduce(set.union, l) 

在Python 2.x中,reduce是內置的。在3.x中,它位於functools模塊中。

5
>>> l = [set([1, 2, 3]), set([3, 4, 5]), set([0, 1])] 
>>> set.union(*l) 
set([0, 1, 2, 3, 4, 5]) 
+0

然而@ JustinPeel的語法更清潔 – 2012-02-25 23:56:25