python - 如何使用 itertools 解决这个问题?
问题描述
你好我试过使用这个工具:
list(combinations('01', 3))
但我得到了这个结果:
[]
我想要这些结果:
000
001
011
111
101
100
010
另外,我也想有不同的情况。
例如,鉴于111
我期望这些结果:
111
12
21
3
是否可以使用 来做这两件事itertools
?
解决方案
这是一个部分使用此答案中的解决方案的解决方案。
- 亚历克西斯的答案(见链接)的分区函数返回分成组的列表(即[[[1,1,1]],[[1,1],[1]],[[1],[1, 1]],[[1],[1],[1]]]
- 为了得到你问题中的数字,我添加了一个只存储每个内部列表总和的部分
- list(dict.fromkeys(...)) 用于删除重复项
代码
def partition(collection):
if len(collection) == 1:
yield [ collection ]
return
first = collection[0]
for smaller in partition(collection[1:]):
# insert `first` in each of the subpartition's subsets
for n, subset in enumerate(smaller):
yield smaller[:n] + [[ first ] + subset] + smaller[n+1:]
# put `first` in its own subset
yield [ [ first ] ] + smaller
elements = list([1,1,1])
lst = list(dict.fromkeys([ tuple([sum(p[1][i]) for i in range(len(p[1]))]) for p in enumerate(partition(elements), 1) ]))
print(sorted(lst))
输出:
[(1, 1, 1), (1, 2), (2, 1), (3,)]
推荐阅读
- javascript - JSON 响应被捕获所有 URL 破坏并返回为 404 页面
- c++ - clang 预处理输出中的元数据是什么?
- python - 检测大型python列表中的重复整数序列
- javascript - 在 ASPX 中使用物化打开模态
- python - 使用python执行多个日期的文件下载
- angular - chartjs错误转换为null
- java - Gradle 问题 - 错误:任务执行失败
- python - 用于图像分割的 TensorFlow:更改小批量大小会停止学习
- c# - DPI 感知 - 一个版本不感知,另一个版本感知系统
- c# - 在位图 C# 的中心制作一个点