找出集合的所有子集:冪集
給定一組元素,找出其所有子集可能是一項常見的編程任務。這稱為構造集合的冪集。
使用 itertools 的解決方案
Python itertools 模組提供了一個優雅的解決方案,用於使用組合計算冪集:
from itertools import chain, combinations def powerset(iterable): "powerset([1,2,3]) --> () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)" s = list(iterable) return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
怎麼樣有效
此函數產生集合中元素的所有組合,從空集到完整集。它透過迭代可能的子集大小範圍(0 到集合中的元素數量)並為每個大小建立元素組合來實現此目的。
範例
例如集合{0,1,2,3}的冪集是:
list(powerset("abcd")) [(), ('a',), ('b',), ('c',), ('d',), ('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd'), ('a', 'b', 'c'), ('a', 'b', 'd'), ('a', 'c', 'd'), ('b', 'c', 'd'), ('a', 'b', 'c', 'd')]
自訂
如果希望從powerset 排除空子集,可以將powerset函數中的 range 語句修改為 range(1 ,長度 1):
def powerset(iterable): s = list(iterable) return chain.from_iterable(combinations(s, r) for r in range(1, len(s)+1))
以上是如何在Python中高效產生給定集合的所有子集(冪集)?的詳細內容。更多資訊請關注PHP中文網其他相關文章!