查找集合的所有子集:幂集
给定一组元素,查找其所有子集可能是一项常见的编程任务。这称为构造集合的幂集。
使用 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中文网其他相关文章!