1

我正在尝试输出具有某些约束的列表的所有组合:

我需要打印长度 x 与域 1 到 y 的所有组合。

例如,设 x=3,域 y=4。我需要生成 1 到 4 和 3 个成员的所有可能组合,不重复:

[1,2,3]
[2,3,4]
[1,2,4]
[1,3,4]

我知道这应该是 y 选择 x 但很难弄清楚如何循环查找所有组合。

使用 itertools 我知道如何生成给定列表的长度 x 的所有组合:

import itertools
print list(itertools.combinations([1,2,3],2))

但我不知道应该如何生成具有某个域的所有组合。

4

1 回答 1

3

要创建从 1 到 的列表y,请使用range(1, y+1)itertools有了这些知识,将您当前的知识应用于问题应该非常简单:

import itertools
print list(itertools.combinations(range(1, y+1), x))

要将每个结果作为列表而不是元组获取,您可以使用列表推导:

print [list(x) for x in itertools.combinations(range(1, y+1), x)]

或替代使用map()

print map(list, itertools.combinations(range(1, y+1), x))
于 2013-11-08T21:45:35.773 回答