2010-12-13 14 views
5

Ho una lista di parole e ho bisogno di generare tutte le possibili permutazioni di queste, con un avvertimento.Creazione di sottoinsiemi di un elenco di parole permutato in Python

Attualmente uso il seguente codice:

from itertools import permutations 

wordlist = ["word1", "word2", "word3"] 

for perm in permutations(wordlist): 
    print "".join(perm) 

che fornisce l'output:

word1word2word3 
word1word3word2 
... 
word3word2word1 

Tuttavia ho anche bisogno di stampare sottoinsiemi queste parole, come ad esempio:

word1  
word1word2 
word2word1 
... 

Ma non ho la minima idea di come farlo. Dove comincio? Cosa dovrei leggere?

+0

Cercate di evitare di usare il nome di 'list', perché' list' è una funzione built-in che converte iterabili alle liste. –

+0

Oh grazie, non lo sapevo. Questo spiega perché non è stato possibile provare a convertire il mio iterabile in un elenco quando ho inizialmente scritto questo codice. Doh! Lo apprezzo. Ho modificato il post originale per riflettere questo, nel caso in cui qualcun altro incontri questo problema. –

+1

Questo è chiamato il powerset (quasi - il powerset include anche il set vuoto) –

risposta

5

Modificato:

from itertools import permutations 

xlist = ["word1", "word2", "word3"] 

for n in range(1, len(xlist)+1): 
    for perm in permutations(xlist, n): 
     print "".join(perm) 

Edit: Uscita:

word1 
word2 
word3 
word1word2 
word1word3 
word2word1 
word2word3 
word3word1 
word3word2 
word1word2word3 
word1word3word2 
word2word1word3 
word2word3word1 
word3word1word2 
word3word2word1 
+0

Grazie, proprio quello di cui ho bisogno. Suppongo che entrambi abbiamo individuato il bug iniziale allo stesso tempo. Ho risposto, ma poi ho notato che era stato risolto. Grazie. –

+0

Sì, mi dispiace per quello. Prego. –

0

Ecco un'implementazione più completa di file di I/O. Grazie Steve, mi sono basato sulla tua risposta. Questo codice, a differenza di altri posti, è stato scritto per Python 3.3.4

from itertools import permutations 
import os 

# GET FILE 
script_dir = os.path.dirname(os.path.realpath(__file__)) 
wordlist_rel_path = "wordlist.txt" 
wordlist_abs_file_path = os.path.join(script_dir, wordlist_rel_path) 

# READ WORD LIST FROM FILE 
word_list = [] 
print ("\ninput file is:", wordlist_abs_file_path,"\n") 
with open(wordlist_abs_file_path) as wordlist: 
    for line in wordlist: 
     word_list.append(line.rstrip()) 

# PRINT INPUT LIST 
print ("input list contains:") 
print(word_list,"\n") 

# GENERATE POWERSET 
powerset_list = [] 
print ("output list is:") 
for n in range(1, len(word_list)+1): 
    for perm in permutations(word_list, n): 
     powerset_list.append("".join(perm)) 
print(powerset_list) 

# WRITE LIST TO FILE 
powerset_rel_path = "powerset.txt" 
powerset_abs_file_path = os.path.join(script_dir, powerset_rel_path) 
powerset_abs_file = open(powerset_abs_file_path, 'w') 
for item in powerset_list: 
    powerset_abs_file.write("%s\n" % item) 
powerset_abs_file.close() 
Problemi correlati