2013-04-28 19 views
5

Po pewnych problemach z listą po użyciu funkcji permutacji itertools.Konwersja wyjścia z itertools.permutations z listy krotek do listy ciągów znaków

from itertools import permutations 

def longestWord(letters): 
    combinations = list(permutations(letters)) 
    for s in combinations: 
     ''.join(s) 
    print(combinations) 

longestWord("aah") 

Wyjście wygląda następująco:

[('a', 'a', 'h'), ('a', 'h', 'a'), ('a', 'a', 'h'), ('a', 'h', 'a'), 
('h', 'a', 'a'), ('h', 'a', 'a')] 

Chciałbym to być prosta lista, ale wydaje się, że wychodzi w postaci listy krotek (?). Czy ktoś może mi pomóc sformatować to tak to wychodzi jak:

['aah', 'aha', 'aah', 'aha', 'haa', 'haa'] 
+2

Wywołanie permutacje 'combinations' jest mylące. – DSM

Odpowiedz

8
from itertools import permutations 

def longestWord(letters): 
    return [''.join(i) for i in permutations(letters)] 

print(longestWord("aah")) 

Wynik:

['aah', 'aha', 'aah', 'aha', 'haa', 'haa'] 

kilka sugestii:

  1. Nie drukuj wewnątrz funkcji, zamiast tego zwróć i wydrukuj zwróconą wartość.
  2. Twój nazewnictwa zmiennej combination nie jest dobre, ponieważ połączenie jest różny od permutacji
  3. Twój przystąpić nie robił nic, dołącz nie zmienia wartości inline, to zwraca łańcuch
  4. Nazwa funkcji nie reprezentuje co to robi. najdłuższe słowo?
0

Permutacje zwraca iterator plonowania krotki więc trzeba się do nich przyłączyć. Mapa to dobry sposób na zrobienie tego zamiast pętli for.

from itertools import permutations 

def longestWord(letters): 
    combinations = list(map("".join, permutations(letters))) 
    print(combinations) 

longestWord("aah") 

Sposób, w jaki robili to, byłeś łączenia liter w każdej krotki w jeden ciąg, ale nie zmieniając listę kombinacji.

0

Spróbuj to zamiast:

combinations = permutations(letters) 
print [''.join(x) for x in combinations] 

(. Twój join nie był naprawdę robi coś pożytecznego - po przyłączyć przeprowadzono jego wartość zwrot nie został zapisany)

+0

"Lista" tutaj nic dla ciebie nie kupuje. – Eric

+0

Tak, skopiowałam tę linię z OP dla kontekstu. –

0

jeden liner

[''.join(h) for h in [list(k) for k in longestWord("aah")]] 
Powiązane problemy