2010-12-13 15 views
5

Ich habe eine Liste von Wörtern und ich muss alle möglichen Permutationen von diesen generieren, mit einem Vorbehalt.Generieren von Teilmengen einer permutierten Wortliste in Python

Ich verwende derzeit den folgenden Code:

from itertools import permutations 

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

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

, die den Ausgang gibt:

word1word2word3 
word1word3word2 
... 
word3word2word1 

aber ich brauche es auch Subsets diese Worte, wie zu drucken:

word1  
word1word2 
word2word1 
... 

Aber ich habe nicht die geringste Idee, wie das geht. Wo fange ich an? Was soll ich lesen?

+0

Versuchen zu vermeiden, mit den Namen 'list', weil' list' ist eine eingebaute Funktion, die Iterables Listen umwandelt. –

+0

Oh danke, das wusste ich nicht. Das erklärt, warum der Versuch, meine iterierbare in eine Liste zu konvertieren, nicht funktionierte, als ich diesen Code ursprünglich schrieb. Do! Ich schätze es. Ich habe den ursprünglichen Beitrag bearbeitet, um dies zu reflektieren, falls jemand anderes auf dieses Problem stößt. –

+1

Dies nennt man das Powerset (fast - das Powerset enthält auch die leere Menge) –

Antwort

5

Edited:

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: Ausgang:

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

Danke, genau was ich brauche. Ich nehme an, wir haben beide den anfänglichen Fehler gleichzeitig entdeckt. Ich antwortete, aber dann bemerkte, dass es behoben worden war. Vielen Dank. –

+0

Ja, tut mir leid. Bitte. –

0

Hier ist eine vollständige Implementierung mit Datei-I/O. Danke Steve, ich habe mich auf deine Antwort gestützt. Dieser Code, im Gegensatz zu anderen Beiträgen wurde für Python geschrieben 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() 
Verwandte Themen