Search code examples
pythonpython-3.xpython-itertools

Add permutation outcomes into a string and break line between them


I want to write a list of permutations, and between each permutation, break the line so I don't end up with the giant mess that I usually get of parens and blocks, ect.

How might I do this?

Furthermore, how would I add together the permutations to create one string per outcome? My code:

import itertools
print(list(itertools.permutations(["an","de","si","ta"],4)))

Ideally, i would like it print something like this:

andesita 
tasidean

Instead of:

[('an', 'de', 'si', 'ta'), ('an', 'de', 'ta', 'si'), ('an', 'si', 'de', 'ta'), ('an', 'si', 'ta', 'de'), ('an', 'ta', 'de', 'si'), ('an', 'ta', 'si', 'de'), ('de', 'an', 'si', 'ta'), ('de', 'an', 'ta', 'si'), ('de', 'si', 'an', 'ta'), ('de', 'si', 'ta', 'an'), ('de', 'ta', 'an', 'si'), ('de', 'ta', 'si', 'an'), ('si', 'an', 'de', 'ta'), ('si', 'an', 'ta', 'de'), ('si', 'de', 'an', 'ta'), ('si', 'de', 'ta', 'an'), ('si', 'ta', 'an', 'de'), ('si', 'ta', 'de', 'an'), ('ta', 'an', 'de', 'si'), ('ta', 'an', 'si', 'de'), ('ta', 'de', 'an', 'si'), ('ta', 'de', 'si', 'an'), ('ta', 'si', 'an', 'de'), ('ta', 'si', 'de', 'an')]

Solution

  • Iterate over the itertools.permutations() results and use str.join() to create one string from each:

    for combo in itertools.permutations(["an", "de", "si", "ta"], 4):
        print(''.join(combo))
    

    Demo:

    >>> import itertools
    >>> for combo in itertools.permutations(["an", "de", "si", "ta"], 4):
    ...     print(''.join(combo))
    ...
    andesita
    andetasi
    ansideta
    ansitade
    antadesi
    antaside
    deansita
    deantasi
    desianta
    desitaan
    detaansi
    detasian
    siandeta
    siantade
    sideanta
    sidetaan
    sitaande
    sitadean
    taandesi
    taanside
    tadeansi
    tadesian
    tasiande
    tasidean