K-permutations in lexicographical order

I am trying to generate k-permutations (variations) in lexicographic (alphabetical) order. For example, this code

import itertools a = list('ABCD') k = 2 for c in itertools.combinations(a, k): for p in itertools.permutations(c): print "".join(p), 

prints

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

and I'm looking

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

The answer must be iterable, so sort not an option.

+4
source share
2 answers

You can simply use permutations without combinations :

 import itertools a = 'ABCD' k = 2 for p in itertools.permutations(a, k): print "".join(p), 

See also:

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

Source: https://habr.com/ru/post/1384112/


All Articles