How to get pairwise combinations of words?

Question:

Given a string I want pair wise combinations of the words present in the string with blank spaces. For instance for the following string:

string = "This is cat"

I want the following output:

str1 = "This is cat"
str2 = "Thisis cat"
str3 = "This iscat"
str4 = "Thisiscat"

I tried something with itertools. Basically getting all pairwise combinations of True and False:

permutations = list(itertools.product([False, True], repeat=2)

and add the blank spaces based on True.

This is what I’m trying:

 
args = string.split()
permutations = list(itertools.product([False, True], repeat=len(args)-1))

strings = []
for i in range(len(args)-1):
    string = ""
    for permutation in permutations:
            if permutation[i] is True:
                string = string + " " + args[i]
            
            if permutation[i] is False:
                string = string + args[i]
    strings.append(string)

Asked By: saul santos

||

Answers:

i like the idea using combinations of True and False, and it actualy works (if we may use ‘_’ as a replacement):

from itertools import product

string = "This is a cat"
strings = []

permutations = list(product([False, True], repeat=string.count(' ')))
for permutation in permutations:
    s = string
    for p in permutation:
        s = s.replace(' ','' if p else '_',1)
    strings.append(s.replace('_',' ')) 

>>> strings
'''
['This is a cat',
 'This is acat',
 'This isa cat',
 'This isacat',
 'Thisis a cat',
 'Thisis acat',
 'Thisisa cat',
 'Thisisacat']
Answered By: SergFSM
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.