Python - 生成/迭代组合

时间:2015-11-02 18:22:42

标签: python combinations

我首先要说的是,我对Python很新,并且对编码很感兴趣。我对基本概念有一定的了解,但Python中特别使用的函数在很大程度上是我所不知道的。 Fwiw我是一个视觉/体验学习者。

如果这个问题已被提出并且已经回答,我也想直截了当地说明我道歉。我找到了很多“类似”的问题,但没有一个真正帮助我找到解决方案。

问题

如我的主题标题所述,我有兴趣将nCr的“输出”(正确的术语?)创建到列表中,或者是查看它的最佳方法。

这将是10选择5.十个变量可以是数字,字母,名称,单词等。组合没有重复和顺序。

研究

我想说我已经查看过像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)

减少工具/功能不再以这种方式使用。我想我已经读到它从Python 3开始变为 functools

问题

如何更新/更改上述代码(示例有用)或任何其他代码以适应reduce?有没有其他方法可以输出组合结果?

***Edit*** 我想我没有清楚地连接问题问题标题的内容。基本上我的主要问题是在问题标题下。虽然看一个人如何使用 itertools 从列表中进行组合是有帮助的,但我不知道如何输出10选择5.:\

1 个答案:

答案 0 :(得分:0)

你想做什么:

>>> import itertools
>>> for combination in itertools.combinations('ABCDEFGHIJ', 5):
>>>    print(''.join(combination))
ABCDE
ABCDF
ABCDG
ABCDH
ABCDI
ABCDJ
ABCEF
ABCEG
ABCEH
ABCEI

如果是这样,那就完成了。如果您想了解如何自己实施combinations功能,那么您很幸运,因为itertools.combinations documentation提供了实施。