k-перестановки в лексикографическом порядке - PullRequest
5 голосов
/ 01 декабря 2011

Я пытаюсь генерировать 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 ]

9 голосов
/ 01 декабря 2011

Вы можете просто использовать permutations без combinations:

import itertools

a = 'ABCD'
k = 2

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

См. Также:

6 голосов
/ 01 декабря 2011
>>> ["".join(x) for x in itertools.permutations(a, k)]
['AB', 'AC', 'AD', 'BA', 'BC', 'BD', 'CA', 'CB', 'CD', 'DA', 'DB', 'DC']
...