Python-生成/迭代组合



我想首先说,我对Python相当陌生,对一般的编码非常感兴趣。我对基本概念有些熟悉,但Python中专门使用的函数对我来说基本上是未知的。

我还想立即声明,如果这个问题已经被问到并得到了回答,我深表歉意。我发现了很多";类似的";问题,但没有一个真正帮助我找到解决方案。

问题

正如在我的主题标题中所述;输出";(正确的术语?)将nCr添加到列表中,或者查看它的最佳方法。

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

研究

我想说的是,我研究过类似的主题,比如这个问题/答案,发现这些概念很有用,但在示例代码中发现了这一点:

    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

问题

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

***Edit***我认为我没有清楚地将问题标题的内容联系起来。基本上,我的主要问题在问题标题下。虽然了解一个人如何使用itertools从列表中进行组合很有帮助,但我不知道如何输出10个选项5。:\

你想做什么吗:

>>> 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文档给出了一个实现。

最新更新