PWS
PWS

Reputation: 195

How to simple add combination vowel each consonant using Python

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

Answers (2)

GeoMatt22
GeoMatt22

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

Patrick Haugh
Patrick Haugh

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

Related Questions