3

我要解决的问题是获取集合 S,它包含 X 个整数的所有可能排列,使得所有整数都大于 0,并且当相加时等于某个 Y。

因此,如果 X 等于 2 并且 Y 等于 5,则可以通过以下列表推导解决问题:

[(a,b) for a in range(1,5) for b in range(1,5) if a+b==5]

但是,我正在尝试解决任意 X 和任意 Y。我可以将其编写为一系列巨大的 if 语句,但我觉得我已经非常接近一个很好的、干净的列表理解来处理它了。有没有办法用列表推导来做到这一点?

4

2 回答 2

2

当然。但是你需要sum()and itertools.product()

于 2012-07-16T18:50:25.937 回答
2

像这样的东西:

[x for x in itertools.product(*variables) if sum(x)==5]

其中 variables 是您range的 s的列表/元组

于 2012-07-16T18:50:43.500 回答