2013-04-28 9 views
5

Avere alcuni problemi con un elenco dopo aver utilizzato la funzione di permutazioni itertools.Conversione dell'output di itertools.permutations dall'elenco delle tuple all'elenco delle stringhe

from itertools import permutations 

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

longestWord("aah") 

L'output è simile al seguente:

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

Vorrei che questo fosse un elenco semplice, ma sembra essere venuta fuori come una lista di tuple (?). Qualcuno può aiutarmi a formattare questo modo si esce come il seguente:

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

Calling permutazioni 'combinations' è confusa. – DSM

risposta

8
from itertools import permutations 

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

print(longestWord("aah")) 

Risultato:

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

alcuni suggerimenti:

  1. Non stampare all'interno della funzione, restituire invece e stampare il valore restituito.
  2. tuo denominazione delle variabili combination non è buona, come combinazione è diversa dalla permutazione
  3. vostro ci uniamo non stava facendo nulla, unire non cambia il valore in linea, viene restituita la stringa
  4. Il nome della funzione non rappresenta cosa fa. la parola più lunga?
0

permutazioni restituisce un iteratore cedendo tuple quindi è necessario unirsi a loro. Una mappa è un bel modo per farlo invece del tuo ciclo.

from itertools import permutations 

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

longestWord("aah") 

Il modo in cui si stavano facendo, si stavano unendo le lettere in ogni tupla in una singola stringa, ma non sono stati alterare la lista combinazioni.

0

Prova a modificare:

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

(. Il tuo join non è stato davvero fare qualcosa di utile - dopo che il suo valore di ritorno aderire è stata eseguita non è stata salvata)

+0

La 'lista' qui non ti compra nulla – Eric

+0

Sì, copia quella riga da OP per il contesto. –

0

uno di linea

[''.join(h) for h in [list(k) for k in longestWord("aah")]]