2012-08-07 30 views
1

我想使用itertools从字母表中的每个字母中获取所有3个字母的置换。这回来空白:在Python中获取排列itertools

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) 

我做错了什么?

+0

'iterable'定义在哪里?请包括语法上有效的代码 – jamylak 2012-08-07 06:10:09

+0

我只是试图从文档中学习,http://docs.python.org/library/itertools就是这样说的。 – Damien 2012-08-07 06:11:37

+1

这不是它说你改变了它。此外,这只是解释“排列”的代码 – jamylak 2012-08-07 06:12:20

回答

7

itertools.permutations文档中的代码说明如何在功能实现,而不是如何使用它。要做到这一点:

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

您可以将其转换为一个列表(print(list(perms)))全部打印出来,但你可以遍历他们在for循环,如果你想做些别的事情与他们 - 例如,

for perm in perms: 
    ... 
+0

非常感谢!如果我遍历它们,它会使用ABC还是(A,B,C)? – Damien 2012-08-07 06:19:19

+0

@Damien'('A','B','C')' – jamylak 2012-08-07 06:20:36

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') 
..... 

这应该做工精细