python - 如何按顺序打印幂集,每对子集只有一个元素不同?
问题描述
我想按顺序打印一个幂集,以便相邻子集仅相差一个元素。
例如:
Input: S= {1,2,3,4}
输出将像这样打印:
{"",{1},{2}, {3}, {4} ,{4,1}, {4,2} ,{4,3},{3,1}...}
或者
{"", {1}, {1,2}, {2}, {2,3}, ...}
解决方案
生成前 2^N 个格雷码,其中 N = len(S)。使用代码的位来选择该集合的元素。
S = [1, 2, 3, 4]
for i in range(2**len(S)):
gray_code = i ^ (i >> 1)
subset = [S[j] for j in range(len(S)) if gray_code & (1 << j) ]
print(subset)
输出:
[]
[1]
[1, 2]
[2]
[2, 3]
[1, 2, 3]
[1, 3]
[3]
[3, 4]
[1, 3, 4]
[1, 2, 3, 4]
[2, 3, 4]
[2, 4]
[1, 2, 4]
[1, 4]
[4]
推荐阅读
- c# - 将 cXML 冲出 PunchOutOrderMessage 发送回 Ariba 的网站
- javascript - 如果未找到数组中的元素,则 Javascript 函数尝试数组中的元素
- spring - 将 QuerydslBinderCustomizer 与 Kotlin Spring Data 一起使用时出现 IllegalArgumentException
- polymer - 在许多递归槽中传递的元素未显示在底层元素中
- linq - takewhile() 是使用 yeild 之类的方法检查每次迭代,还是一次抓取一组元素?
- arrays - Swift Array 实例方法 drop(at: Int)
- node.js - 指示节点模块的唯一过滤器没有任何文档。我该如何使用它?
- python - 在 Pandas 数据框中重新采样并添加阈值信息
- angularjs - AngularJS $scope 没有显示价值
- ruby - 在 Ruby 中,顶级作业有什么作用?