pythoncombinationssubsequence

finding all possible subsequences in a given string


I have written this piece of code and it prints all substrings of a given string but I want it to print all the possible subsequences.

from itertools import combinations_with_replacement
s = 'MISSISSIPPI'
lst = []
for i,j in combinations_with_replacement(range(len(s)), 2):
        print(s[i:(j+1)])


Solution

  • Use combinations to get subsequences. That's what combinations is for.

    from itertools import combinations
    
    def all_subsequences(s):
        out = set()
        for r in range(1, len(s) + 1):
            for c in combinations(s, r):
                out.add(''.join(c))
        return sorted(out)
    

    Example:

    >>> all_subsequences('HELLO')
    ['E', 'EL', 'ELL', 'ELLO', 'ELO', 'EO', 'H', 'HE', 'HEL', 'HELL', 'HELLO', 'HELO',
     'HEO', 'HL', 'HLL', 'HLLO', 'HLO', 'HO', 'L', 'LL', 'LLO', 'LO', 'O']
    >>> all_subsequences('WORLD')
    ['D', 'L', 'LD', 'O', 'OD', 'OL', 'OLD', 'OR', 'ORD', 'ORL', 'ORLD', 'R', 'RD',
     'RL', 'RLD', 'W', 'WD', 'WL', 'WLD', 'WO', 'WOD', 'WOL', 'WOLD', 'WOR', 'WORD',
     'WORL', 'WORLD', 'WR', 'WRD', 'WRL', 'WRLD']