Search code examples
pythonpermutation

Permutations without reversed sequences in Python


I would like to generate a list of all permutations of 4 digits where :

  • All 4 digits are always present
  • Two reversed sequences are the same solution. For example. (1,2,3,4) = (4,3,2,1)

I would like to know:

  • What do you call this kind of permutations.
  • If it is possible to generate this list in one step. Below there is an example that generates it in two steps.
import itertools
inp_list = range(1, 5)

# 1. Create the list of all permutations.
permutations = list(itertools.permutations(inp_list))

# 2. Remove sequences that are the reverse of another.
for _p in permutations[::-1]:
    if _p[::-1] in permutations:
        permutations.remove(_p)

for _p in permutations:
    print("\t".join(map(str, _p)))

Solution

  • You could just use the smaller one of each reversal pair:

    from itertools import permutations
    
    for p in permutations(range(1, 5)):
        if p < p[::-1]:
            print(*p)
    

    Output:

    1 2 3 4
    1 2 4 3
    1 3 2 4
    1 3 4 2
    1 4 2 3
    1 4 3 2
    2 1 3 4
    2 1 4 3
    2 3 1 4
    2 4 1 3
    3 1 2 4
    3 2 1 4