获取Python中的排列,itertools

时间:2012-08-07 06:09:07

标签: python permutation itertools

我希望使用itertools从字母表中的每个字母获得所有3个字母的排列。这是空白的:

import itertools 

def permutations(ABCDEFGHIJKLMNOPQRSTUVWXYZ, r=3):
    pool = tuple(iterable)
    n = len(pool)
    r = n if r is None else r
    for indices in product(range(n), repeat=r):
        if len(set(indices)) == r:
            yield tuple(pool[i] for i in indices)

我做错了什么?

2 个答案:

答案 0 :(得分:10)

你有点混淆,这只是代码解释permutations的作用。 itertools实际上是用C代码编写的,python 等效仅用于显示它是如何工作的。

>>> from itertools import permutations
>>> from string import ascii_uppercase
>>> for x in permutations(ascii_uppercase, r=3):
        print x


('A', 'B', 'C')    
('A', 'B', 'D')
('A', 'B', 'E')    
('A', 'B', 'F')
.....

应该可以正常工作

答案 1 :(得分:7)

itertools.permutations文档中的代码解释了函数的实现方式,而不是如何使用它。你想这样做:

perms = itertools.permutations('ABCDEFGHIJKLMNOPQRSTUVWXYZ', r=3)

您可以将它们全部打印出来,将其转换为列表(print(list(perms))),但如果您想对它们执行其他操作,则可以在for循环中迭代它们 - 例如,

for perm in perms:
    ...