2

我想使用 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)

我究竟做错了什么?

4

2 回答 2

10

你有点搞混了,那只是解释什么的代码permutationsitertools实际上是用 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')
.....

那应该可以正常工作

于 2012-08-07T06:14:05.797 回答
8

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

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

print(list(perms))可以通过将其转换为列表(for

for perm in perms:
    ...
于 2012-08-07T06:14:20.477 回答