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 に答える