python - 这个 for 循环生成有序非重复组合列表的错误在哪里?

标签 python loops

给定一个整数变量 n,比如 3,我想获得这些组合: [1, 2, 3, 12, 13, 23, 123] 并将它们保存在列表中。 这是我写的:

cmb = []
for i in xrange(1,n+1):
    for j in xrange(i,n+1):
        cmb.extend(list(itertools.combinations(xrange(i,n+1),j)))

但是当我打印时,我得到了一些不需要的和重复的元组:

n = 3 : [(1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3), (2, 3)]

n = 4 : [(1,), (2,), (3,), (4,), (1, 2), (1, 3), (1, 4), (2, 3 ), (2, 4), (3, 4), (1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4), (1, 2 , 3, 4), (2, 3), (2, 4), (3, 4), (2, 3, 4)]

n = 5 : ...

我做错了什么?

最佳答案

您的代码的问题在于您不断更改输入范围。例如,您从 [1, 2, 3] 中获取了 2 个元素,还从 [2, 3] 中获取了 2 个元素。您应该从同一范围内获取您的组合,只需更改每次获得的元素数量。为此,您不需要双循环:

import itertools
cmb = []
for i in xrange(1, n + 1):
    cmb.extend(itertools.combinations(xrange(1, n + 1), i))

你也可以实现同样的事情:

from itertools import chain, combinations
n = 3
print list(chain.from_iterable(
    combinations(xrange(1, n + 1), i) for i in xrange(1, n + 1)
))

输出:

[(1,), (2,), (3,), (1, 2), (1, 3), (2, 3), (1, 2, 3)]

关于python - 这个 for 循环生成有序非重复组合列表的错误在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29978787/

相关文章:

python - 如何使用 azure 函数编辑 azure blob 存储中的 *.csv 文件?

python - 保留最长的异构体 - 使用python在字典中保留多个键

C++ do-While 循环不循环

python - 在python中使用循环生成变量

loops - 如何访问 BufReader 两次?

python - 查找字典中特定值的平均值

python - 如何防止从 Django Admin 中删除 Django 模型,除非是级联的一部分

Python 使用循环计算多行中的出现次数

java - 在同一行上打印形状

JavaScript 计算嵌套对象中的值