2016-10-31 3 views
1

ich mit elegantem Code zu kommen versuchen, die Kombinationen/Permutationen von Zeichen aus einem einzelnen Zeichen erstellt:Kombinationen und Permutationen der Zeichen

Z.B. von einem einzelnen Zeichen würde ich Code wie diese Permutationen erstellen (Reihenfolge des Ergebnisses ist nicht wichtig):

'a' ----> ['a', 'aa', 'A', 'AA', 'aA', 'Aa'] 

Die nicht so elegante Lösungen Ich habe bisher:

# this does it... 
from itertools import permutations 
char = 'a' 
p = [char, char*2, char.upper(), char.upper()*2] 
pp = [] # stores the final list of permutations 
for j in range(1,3): 
    for i in permutations(p,j): 
     p2 = ''.join(i) 
     if len(p2) < 3: 
      pp.append(p2) 
print pp 
['a', 'aa', 'A', 'AA', 'aA', 'Aa'] 

#this also works... 
char = 'a' 
p = ['', char, char*2, char.upper(), char.upper()*2] 
pp = [] # stores the final list of permutations 
for i in permutations(p,2): 
    j = ''.join(i) 
    if len(j) < 3: 
     pp.append(j) 
print list(set(pp)) 
['a', 'aa', 'aA', 'AA', 'Aa', 'A'] 

# and finally... so does this: 
char = 'a' 
p = ['', char, char.upper()] 
pp = [] # stores the final list of permutations 
for i in permutations(p,2): 
    pp.append(''.join(i)) 
print list(set(pp)) + [char*2, char.upper()*2] 
['a', 'A', 'aA', 'Aa', 'aa', 'AA'] 

Ich bin nicht großartig mit lambdas, und ich vermute, dass dort, wo eine bessere Lösung liegt.

Könnten Sie mir helfen, den elegantesten/pythischsten Weg zum gewünschten Ergebnis zu finden?

Antwort

1

Sie können einfach die itertools.product mit unterschiedlichen repeat Werte verwenden das erwartete Ergebnis

>>> pop = ['a', 'A'] 
>>> from itertools import product 
>>> [''.join(item) for i in range(len(pop)) for item in product(pop, repeat=i + 1)] 
['a', 'A', 'aa', 'aA', 'Aa', 'AA'] 
+0

Oooh zu bekommen, ich mag es. Obwohl ich dies tun würde, um es weniger kompliziert zu machen: pop + ['' .join (item) für Artikel im Produkt (pop, repeat = 2)] –

+0

@JayMarm Die Antwort, die ich zur Verfügung gestellt habe, ist eine generische. Sie können es nach Ihren Bedürfnissen anpassen. – thefourtheye

Verwandte Themen