Reputation: 195
I want to get combination from addition vowel in each consonant in a string
for example
string = "wrld"
and the results like :
{ "warld","wirld,"wurld","werld","world","warald","warild",.....,"worolode","worolodo"}
Upvotes: 0
Views: 211
Reputation: 240
This may do what you want:
from itertools import product
s = 'wrld'
words = ['{}'.join(s).format(*v) for v in product(list('aeiou') + [''], repeat=len(s)-1)]
Upvotes: 1
Reputation: 61032
We'll set up our vowels, including the empty string to represent neighboring consonants. Then we'll use itertools.product
to get all the vowel combinations of the right size. Then we use itertools.zip_longest
to interweave the vowels and consonants. Finally, we use ''.join()
to combine them back into words.
import itertools
vowels = ['', 'a', 'e', 'i', 'o', 'u', 'y']
def word_gen(word):
vowel_gen = itertools.product(vowels, repeat=len(word)+1)
for v in vowel_gen:
yield ''.join(c for x in itertools.zip_longest(v, word, fillvalue='') for c in x)
An example:
>>> list(word_gen('bb'))
['bb', 'bba', 'bbe', 'bbi', 'bbo', 'bbu', 'bby', 'bab', 'baba', 'babe', 'babi', 'babo', 'babu', 'baby', 'beb', 'beba', 'bebe', 'bebi', 'bebo', 'bebu', 'beby', 'bib', 'biba', 'bibe', 'bibi', 'bibo', 'bibu', 'biby', 'bob', 'boba', 'bobe', 'bobi', 'bobo', 'bobu', 'boby', 'bub', 'buba', 'bube', 'bubi', 'bubo', 'bubu', 'buby', 'byb', 'byba', 'bybe', 'bybi', 'bybo', 'bybu', 'byby', 'abb', 'abba', 'abbe', 'abbi', 'abbo', 'abbu', 'abby', 'abab', 'ababa', 'ababe', 'ababi', 'ababo', 'ababu', 'ababy', 'abeb', 'abeba', 'abebe', 'abebi', 'abebo', 'abebu', 'abeby', 'abib', 'abiba', 'abibe', 'abibi', 'abibo', 'abibu', 'abiby', 'abob', 'aboba', 'abobe', 'abobi', 'abobo', 'abobu', 'aboby', 'abub', 'abuba', 'abube', 'abubi', 'abubo', 'abubu', 'abuby', 'abyb', 'abyba', 'abybe', 'abybi', 'abybo', 'abybu', 'abyby', 'ebb', 'ebba', 'ebbe', 'ebbi', 'ebbo', 'ebbu', 'ebby', 'ebab', 'ebaba', 'ebabe', 'ebabi', 'ebabo', 'ebabu', 'ebaby', 'ebeb', 'ebeba', 'ebebe', 'ebebi', 'ebebo', 'ebebu', 'ebeby', 'ebib', 'ebiba', 'ebibe', 'ebibi', 'ebibo', 'ebibu', 'ebiby', 'ebob', 'eboba', 'ebobe', 'ebobi', 'ebobo', 'ebobu', 'eboby', 'ebub', 'ebuba', 'ebube', 'ebubi', 'ebubo', 'ebubu', 'ebuby', 'ebyb', 'ebyba', 'ebybe', 'ebybi', 'ebybo', 'ebybu', 'ebyby', 'ibb', 'ibba', 'ibbe', 'ibbi', 'ibbo', 'ibbu', 'ibby', 'ibab', 'ibaba', 'ibabe', 'ibabi', 'ibabo', 'ibabu', 'ibaby', 'ibeb', 'ibeba', 'ibebe', 'ibebi', 'ibebo', 'ibebu', 'ibeby', 'ibib', 'ibiba', 'ibibe', 'ibibi', 'ibibo', 'ibibu', 'ibiby', 'ibob', 'iboba', 'ibobe', 'ibobi', 'ibobo', 'ibobu', 'iboby', 'ibub', 'ibuba', 'ibube', 'ibubi', 'ibubo', 'ibubu', 'ibuby', 'ibyb', 'ibyba', 'ibybe', 'ibybi', 'ibybo', 'ibybu', 'ibyby', 'obb', 'obba', 'obbe', 'obbi', 'obbo', 'obbu', 'obby', 'obab', 'obaba', 'obabe', 'obabi', 'obabo', 'obabu', 'obaby', 'obeb', 'obeba', 'obebe', 'obebi', 'obebo', 'obebu', 'obeby', 'obib', 'obiba', 'obibe', 'obibi', 'obibo', 'obibu', 'obiby', 'obob', 'oboba', 'obobe', 'obobi', 'obobo', 'obobu', 'oboby', 'obub', 'obuba', 'obube', 'obubi', 'obubo', 'obubu', 'obuby', 'obyb', 'obyba', 'obybe', 'obybi', 'obybo', 'obybu', 'obyby', 'ubb', 'ubba', 'ubbe', 'ubbi', 'ubbo', 'ubbu', 'ubby', 'ubab', 'ubaba', 'ubabe', 'ubabi', 'ubabo', 'ubabu', 'ubaby', 'ubeb', 'ubeba', 'ubebe', 'ubebi', 'ubebo', 'ubebu', 'ubeby', 'ubib', 'ubiba', 'ubibe', 'ubibi', 'ubibo', 'ubibu', 'ubiby', 'ubob', 'uboba', 'ubobe', 'ubobi', 'ubobo', 'ubobu', 'uboby', 'ubub', 'ububa', 'ubube', 'ububi', 'ububo', 'ububu', 'ububy', 'ubyb', 'ubyba', 'ubybe', 'ubybi', 'ubybo', 'ubybu', 'ubyby', 'ybb', 'ybba', 'ybbe', 'ybbi', 'ybbo', 'ybbu', 'ybby', 'ybab', 'ybaba', 'ybabe', 'ybabi', 'ybabo', 'ybabu', 'ybaby', 'ybeb', 'ybeba', 'ybebe', 'ybebi', 'ybebo', 'ybebu', 'ybeby', 'ybib', 'ybiba', 'ybibe', 'ybibi', 'ybibo', 'ybibu', 'ybiby', 'ybob', 'yboba', 'ybobe', 'ybobi', 'ybobo', 'ybobu', 'yboby', 'ybub', 'ybuba', 'ybube', 'ybubi', 'ybubo', 'ybubu', 'ybuby', 'ybyb', 'ybyba', 'ybybe', 'ybybi', 'ybybo', 'ybybu', 'ybyby']
Upvotes: 1