Search code examples
pythonstringwhitespacecombinations

How do I generate all possible combinations of a string with spaces between the characters? Python


How do I generate all possible combinations of a string with spaces between the characters?

[in]: "foobar"

[out]: 
['foobar', 'f oobar', 'fo obar', 'f o obar', 'foo bar', 'f oo bar', 'fo o bar', 
'f o o bar', 'foob ar', 'f oob ar', 'fo ob ar', 'f o ob ar', 'foo b ar', 
'f oo b ar', 'fo o b ar', 'f o o b ar', 'fooba r', 'f ooba r', 'fo oba r', 
'f o oba r', 'foo ba r', 'f oo ba r', 'fo o ba r', 'f o o ba r', 'foob a r', 
'f oob a r', 'fo ob a r', 'f o ob a r', 'foo b a r', 'f oo b a r', 'fo o b a r', 
'f o o b a r', 'foobar', 'f oobar', 'fo obar', 'f o obar', 'foo bar', 
'f oo bar', 'fo o bar', 'f o o bar', 'foob ar', 'f oob ar', 'fo ob ar', 
'f o ob ar', 'foo b ar', 'f oo b ar', 'fo o b ar', 'f o o b ar', 'fooba r', 
'f ooba r', 'fo oba r', 'f o oba r', 'foo ba r', 'f oo ba r', 'fo o ba r', 
'f o o ba r', 'foob a r', 'f oob a r', 'fo ob a r', 'f o ob a r', 'foo b a r', 
'f oo b a r', 'fo o b a r', 'f o o b a r']

Solution

  • import itertools as it
    
    def func(s):
       if not s:
           return [s]
       binary = it.product(['',' '], repeat=len(s)-1)
       zipped = (it.izip_longest(s , comb, fillvalue='') for comb in binary)
       return [''.join(it.chain.from_iterable(x)) for x in zipped]
    
    func('foobar')
    

    output:

    ['foobar',
     'fooba r',
     'foob ar',
     'foob a r',
     'foo bar',
     'foo ba r',
     'foo b ar',
     'foo b a r',
     'fo obar',
     'fo oba r',
     'fo ob ar',
     'fo ob a r',
     'fo o bar',
     'fo o ba r',
     'fo o b ar',
     'fo o b a r',
     'f oobar',
     'f ooba r',
     'f oob ar',
     'f oob a r',
     'f oo bar',
     'f oo ba r',
     'f oo b ar',
     'f oo b a r',
     'f o obar',
     'f o oba r',
     'f o ob ar',
     'f o ob a r',
     'f o o bar',
     'f o o ba r',
     'f o o b ar',
     'f o o b a r']