shn
shn

Reputation: 5266

Spliting a string containing many values into many strings with one value for each

I have some strings containing many values separated by a white space character. Sometime we can find a value which is composed of many values which are separated by the character "," for example in the following string, the values 3 and 5 are composed of 2 and 4 values respectively separated by commas.respectively

value1 value2 value3_0,value3_1 value4 value5_0,value5_1,value5_2,value5_3 value6

I want to split this string into many strings so that the is no composed value in the string. So the previous string become:

value1 value2 value3_0 value4 value5_0 value6

value1 value2 value3_1 value4 value5_1 value6

value1 value2 value3_0 value4 value5_2 value6

value1 value2 value3_1 value4 value5_3 value6

value1 value2 value3_0 value4 value5_1 value6

value1 value2 value3_1 value4 value5_2 value6

value1 value2 value3_0 value4 value5_3 value6

value1 value2 value3_1 value4 value5_0 value6

How is it possible to do that very easily in python ?

EDIT: In the input string, there is a component "value3_0,value3_1" (this component is composed of 2 values) and we have "value5_0,value5_1,value5_2,value5_3" (this component is composed of 4 values), so we will have 2*4 = 8 new strings where there is no composed components.

Upvotes: 1

Views: 71

Answers (1)

Jon Clements
Jon Clements

Reputation: 142126

How about:

from itertools import product

text = 'value1 value2 value3_0,value3_1 value4 value5_0,value5_1,value5_2,value5_3 value6'
items = [el.split(',') for el in text.split()]
for item in product(*items):
    print item # use ' '.join(item) to get a string back

Output:

('value1', 'value2', 'value3_0', 'value4', 'value5_0', 'value6')
('value1', 'value2', 'value3_0', 'value4', 'value5_1', 'value6')
('value1', 'value2', 'value3_0', 'value4', 'value5_2', 'value6')
('value1', 'value2', 'value3_0', 'value4', 'value5_3', 'value6')
('value1', 'value2', 'value3_1', 'value4', 'value5_0', 'value6')
('value1', 'value2', 'value3_1', 'value4', 'value5_1', 'value6')
('value1', 'value2', 'value3_1', 'value4', 'value5_2', 'value6')
('value1', 'value2', 'value3_1', 'value4', 'value5_3', 'value6')

Upvotes: 2

Related Questions