幂集生成:一种优雅的方法
问题:
给定一个集合,我们如何高效地计算powerset,包含原始数据的所有可能的子集set?
答案:
Python 的多功能 itertools 模块为幂集生成提供了一个出色的解决方案,如下所示:
from itertools import chain, combinations def powerset(iterable): s = list(iterable) return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))
解释:
输出:
当我们将此幂集函数应用于包含元素“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')]
自定义:
如果初始为空输出中的元组是不可取的,只需更改范围语句以使用 1 到可迭代长度加 1 的范围,从而有效地从幂集中排除空组合。
以上是我们如何有效地生成给定集合的幂集?的详细内容。更多信息请关注PHP中文网其他相关文章!