I've seen may questions on getting all the possible substrings (i.e., adjacent sets of characters), but none on generating all possible strings by removing any number of characters.
For example, let:
x = 'abc'
I would like the output to be something like:
['abc', 'ab', 'ac', 'bc', 'a', 'b', 'c']
The main point is that we can remove multiple characters that are not adjacent in the original string (as well as the adjacent ones).
Here is what I have tried so far:
def return_substrings(input_string): length = len(input_string) return [input_string[i:j + 1] for i in range(length) for j in range(i, length)] print(return_substrings('abc'))
However, this only removes sets of adjacent strings from the original string, and will not return the element
'ac' from the example above.
Another example is if we use the string
'abcde', the output list should contain the elements
You can do this easily using
>>> from itertools import combinations >>> x = 'abc' >>> [''.join(l) for i in range(len(x)) for l in combinations(x, i+1)] ['a', 'b', 'c', 'ab', 'ac', 'bc', 'abc']
If you want it in the reversed order, you can make the
range function return its sequence in reversed order
>>> [''.join(l) for i in range(len(x),0,-1) for l in combinations(x, i)] ['abc', 'ab', 'ac', 'bc', 'a', 'b', 'c']