按字典顺序排列的k-排列

时间:2011-12-01 13:12:26

标签: python iterator combinatorics

我正在尝试按字典顺序(按字母顺序)生成k-排列(变体)。例如,此代码

import itertools

a = list('ABCD')
k = 2

for c in itertools.combinations(a, k):
    for p in itertools.permutations(c):
        print "".join(p),

打印

AB BA AC CA AD DA BC CB BD DB CD DC

我正在寻找

AB AC AD BA BC BD CA CB CD DA DB DC

答案需要是可迭代的,因此sort不是一个选项。

2 个答案:

答案 0 :(得分:9)

您可以在没有permutations的情况下使用combinations

import itertools

a = 'ABCD'
k = 2

for p in itertools.permutations(a, k):
    print "".join(p),

另见:

答案 1 :(得分:6)

>>> ["".join(x) for x in itertools.permutations(a, k)]
['AB', 'AC', 'AD', 'BA', 'BC', 'BD', 'CA', 'CB', 'CD', 'DA', 'DB', 'DC']