首頁 >後端開發 >Python教學 >如何在Python中高效產生給定集合的所有子集(冪集)?

如何在Python中高效產生給定集合的所有子集(冪集)?

Linda Hamilton
Linda Hamilton原創
2024-12-04 02:15:11612瀏覽

How Can I Efficiently Generate All Subsets (Powerset) of a Given Set in Python?

找出集合的所有子集:冪集

給定一組元素,找出其所有子集可能是一項常見的編程任務。這稱為構造集合的冪集。

使用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn