En supposant que vous ne signifie combinaisons (pas de répétitions, l'ordre n'a pas d'importance):
import itertools
S = [ 'a', 'ab', 'ba' ]
for i in range(len(S)+1):
for c in itertools.combinations(S, i):
cc = ''.join(c)
if len(cc) <= 6:
print c
émet toutes les possibilités:
()
('a',)
('ab',)
('ba',)
('a', 'ab')
('a', 'ba')
('ab', 'ba')
('a', 'ab', 'ba')
Si vous voulez dire quelque chose de différent de « combinaisons », il est juste un problème d'utilisation du bon itérateur ou du bon générateur dans le for
(par exemple, itertools.permutations
, ou autre chose de votre propre conception).
Modifier: si par exemple vous dire « répétitions et l'ordre sont importantes »,
def reps(seq, n):
return itertools.product(*[seq]*n)
for i in range(7):
for c in reps(S, i):
cc = ''.join(c)
if len(cc) <= 6:
print c
vous donnera les 85 nécessaires lignes de production.
Éditer à nouveau: J'avais une mauvaise limite de boucle (et donc une mauvaise longueur de sortie) - tx pour le commentateur qui l'a signalé. En outre, cette approche peut produire une chaîne> 1 fois, si les '' .join de tuples différents sont considérés comme équivalents; par exemple, il produit ('a', 'ba') distinct de ('ab', 'a') bien que leur '' .join soit le même (même "mot" de différentes "combinaisons", je suppose - la terminologie utilisée n'est pas entièrement claire).
Êtes-vous lookin pour quelque chose comme ça? http://stackoverflow.com/questions/361/generate-list-of-all-possible-permutations-of-a-string –
Pouvez-vous développer votre exemple? Est-il correct de choisir le même article plusieurs fois? – cmcginty