假設我有一個集合的列表,我想要在該列表中的所有集合上獲得聯合。有沒有什麼辦法可以使用生成器表達式來完成此操作?換句話說,我怎麼能創建該列表中的所有集合的聯盟直接作爲frozenset
?如何使用生成器表達式創建多個集合的聯合?
回答
只需使用the .union()
method。
>>> l = [set([1,2,3]), set([4,5,6]), set([1,4,9])]
>>> frozenset().union(*l)
frozenset([1, 2, 3, 4, 5, 6, 9])
這適用於任何可迭代的iterables。
只要注意,使用'frozenset.union'作爲一個非綁定方法會更簡潔,如果'l'包含'frozenset's例如'frozenset.union(* 1)'。 'set.union'也一樣。 – vaultah 2016-12-02 16:00:08
嵌套的發生器表達式。但我認爲他們有點神祕,所以KennyTM建議的方式可能會更清晰。
frozenset(some_item for some_set in some_sets for some_item in some_set)
+1爲巧妙 – aaronasterling 2010-08-09 08:08:39
這確實更清楚,但比肯尼的解決方案慢大約4倍 – fransua 2015-05-06 13:39:46
我假設你試圖避免的是在建立聯合時,冷凝對象的中間創作?
以下是一種方法。 注:這個原本用來itertools.chain()
,但正如肯尼的評論指出,下面的版本稍有好轉:
import itertools
def mkunion(*args):
return frozenset(itertools.chain.from_iterable(args))
調用是這樣的:
a = set(['a','b','c'])
b = set(['a','e','f'])
c = mkunion(a,b) # => frozenset(['a', 'c', 'b', 'e', 'f'])
如果你要'.chain(* args)',使用'chain.from_iterable'。 – kennytm 2010-08-09 08:33:04
@KennyTM:好點,我做了改變。 – 2010-08-09 16:28:22
我的性能測試結果(使用python 3):當套件數量<10000時,KennyTM的響應速度稍快,但這種響應速度稍微快一些,而且30000套 – 2012-07-28 05:19:39
- 1. 如何生成具有多個集合的表的控制器?
- 2. 如何讓Jxls生成多個集合
- 3. 使用集合集合生成XML
- 4. 如何使用正則表達式來表示這個集合
- 5. 在一個表達式中生成不可變集合
- 6. 如何創建自己的聯合表與多個地方
- 7. 如何創建用於組合多個圖像的圖像生成器?
- 8. 帶有2個聯合的公用表表達式計數器
- 9. c#使用表達式樹查詢多個集合
- 10. 如何使用lambda表達式從兩個集合
- 11. 如何使用LINQ到兩個或多個集合合併成一個集
- 12. Rails的:如何將多個ActiveRecord關聯結合單個集合
- 13. 如何爲正則表達式集合找到「最小生成集」?
- 14. 如何從字符串創建屬性(集合)表達式選擇器?
- 15. ScalaCheck集合生成器
- 16. 從集合創建集合?
- 17. Magento集合表達式
- 18. 評估集合表達式
- 19. 如何使用Magento集合中的表達式執行ORDER BY
- 20. 如何創建IQueryable集合?
- 21. Rails的無關聯創建集合
- 22. 生成多個組合的組合
- 23. 在集合中創建通用集合
- 24. 如何使用集合屬性爲一對多表執行聯合查詢?
- 25. NBuilder - 如何創建一個包含集合幾個派生類
- 26. 使用嵌套的lambda表達式集合來創建對象圖
- 27. 到達關聯集合
- 28. 如何從defrecord創建一個集合?
- 29. 如何創建一個包含集合
- 30. 聯合表達Fody
參見:http://stackoverflow.com/ a/5182801/1959808 – 2017-03-04 06:06:22