【发布时间】:2015-11-02 18:22:42
【问题描述】:
首先我想说的是,我对 Python 还很陌生,并且对一般的编码非常感兴趣。我对基本概念有些熟悉,但 Python 中专门使用的函数对我来说很大程度上是未知的。首先我是一个视觉/体验学习者。
我还想立即声明,如果这个问题已被提出并已得到回答,我深表歉意。我发现了很多“类似”的问题,但没有一个能真正帮助我找到解决方案。
问题
正如我的主题标题中所述,我有兴趣将 nCr 的“输出”(正确的术语?)创建到列表中,或者查看它的最佳方法。
10选5。这10个变量可以是数字、字母、名字、单词等。组合没有重复,也没有顺序。
研究
我想说的是,我查看过类似的主题 question/answer 并发现这些概念很有帮助,但在示例代码中发现了这一点:
from itertools import izip
reduce(lambda x, y: x * y[0] / y[1], izip(xrange(n - r + 1, n+1), xrange(1, r+1)), 1)
reduce 工具/功能不再以这种方式使用。我想我读到它从 Python 3 开始更改为 functools。
问题
如何更新/更改上述代码(示例很有帮助)或任何其他代码以适应减少?有没有其他方法可以输出组合结果?
***Edit***
我想我没有清楚地将 Problem 和 Question 标题的内容联系起来。基本上我的主要问题是在 Problem 标题下。虽然了解一个人如何使用 itertools 从列表中进行组合很有帮助,但我不知道如何输出 10 选择 5。:\
【问题讨论】:
-
reduce曾经是一个内置函数。它现在是functools包中的一个函数。其他任何事情都不应该改变。 Python3 中的等效行是导入from functools import reduce之后的reduce(lambda x, y: x * y[0] / y[1], zip(range(n - r + 1, n+1), range(1, r+1)), 1)。注意izip -> zip和xrange -> range的变化 -
您能否举例说明您希望输出的样子?
-
我正在寻找类似的东西:
Variables are 1/a/2/b/3/c/4/d/5/e output is 1a2b3, 1a2bc, 1a2b4...等等。
标签: python combinations