2012-03-21 2 views
1

Je veux générer toutes les permutations possibles pour les configurations de consonne/voyelle spécifiques. Par exemple, je voudrais toutes les permutations de mots de 3 lettres possibles avec le format CVC (Consonant, Vowel, Consonant).Permutations Python Consonne/voyelle

Je ne connais pas de moyen de multiplier les permutations:

permutations("bcdfghjklmnpqrstvwxyz",1) * permutations("aeiou",1) * permutations("bcdfghjklmnpqrstvwxyz",1) 

Comment cela peut-il être réalisé en python?

+1

Regardez dans le 'itertools' module. – wim

Répondre

4

itertools.product à la rescousse:

>>> import itertools 
>>> consonants = "bcdfghjklmnpqrstvwxyz" 
>>> vowels = "aeiou" 
>>> poss = list(itertools.product(consonants, vowels, consonants)) 
>>> len(poss) 
2205 
>>> poss[:10] 
[('b', 'a', 'b'), ('b', 'a', 'c'), ('b', 'a', 'd'), ('b', 'a', 'f'), ('b', 'a', 'g'), ('b', 'a', 'h'), ('b', 'a', 'j'), ('b', 'a', 'k'), ('b', 'a', 'l'), ('b', 'a', 'm')] 

ou si vous voulez que des mots en particulier:

>>> words = list(''.join(letters) for letters in itertools.product(consonants, vowels, consonants)) 
>>> words[:10] 
['bab', 'bac', 'bad', 'baf', 'bag', 'bah', 'baj', 'bak', 'bal', 'bam'] 
+0

J'utiliserais probablement 'map (''. Join, itertools.product (c, v, c))' sur Python 2. – agf

+0

@agf: aussi lisse que la carte sur une méthode peut être, je finis généralement par préférer quelque chose qui est un peu plus robuste à la perturbation. – DSM

2

est ici une solution non itertools:

>>> import string 
>>> vowels = set('aeiou') 
>>> consonants = set(string.ascii_lowercase) - vowels 
>>> cvc_generator = (''.join((c1, v, c2)) for c1 in consonants for v in vowels for c2 in consonants) 
>>> cvc_generator.next() 
'cac' 
>>> cvc_generator.next() 
'cab' 
>>> cvc_generator.next() 
'cad' 
>>> cvc_generator.next() 
'cag' 
>>> print ' '.join(cvc for cvc in cvc_generator) 
caf cah cak caj cam cal can caq cap cas car cat caw cav cay cax caz cic cib cid cig cif cih cik cij cim cil cin ciq cip cis cir cit ciw civ ciy cix ciz cec ceb ced ceg cef ceh cek cej cem cel cen ceq cep ces cer cet cew cev cey cex cez cuc cub cud cug cuf cuh cuk cuj cum cul cun cuq cup cus cur cut cuw cuv cuy cux cuz coc cob  <..snip..>