2010-12-13 42 views
5

J'ai une liste de mots et j'ai besoin de générer toutes les permutations possibles de ceux-ci, avec une mise en garde.Génération de sous-ensembles d'une liste de mots permutés en Python

J'utilise actuellement le code suivant:

from itertools import permutations 

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

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

qui donne la sortie:

word1word2word3 
word1word3word2 
... 
word3word2word1 

Cependant, je dois aussi pour imprimer des sous-ensembles de ces mots, tels que:

word1  
word1word2 
word2word1 
... 

Mais je n'ai pas la moindre idée de comment faire cela. Par où commencer? Que devrais-je lire?

+0

Essayez d'éviter d'utiliser le nom 'list', parce que' list' est une fonction intégrée qui convertit iterables aux listes. –

+0

Oh merci, je ne le savais pas. Cela explique pourquoi essayer de convertir mon itérable à une liste ne fonctionnait pas quand j'ai initialement écrit ce code. Doh! Je vous en suis reconnaissant. J'ai modifié le post original pour refléter ceci, au cas où quelqu'un d'autre rencontrerait ce problème. –

+1

Ceci s'appelle le powerset (presque - le powerset inclut également l'ensemble vide) –

Répondre

5

Modifié:

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

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

Merci, précisément ce dont j'ai besoin. Je suppose que nous avons tous deux repéré le bug initial en même temps. J'ai répondu, mais j'ai remarqué que ça avait été réparé. Je vous remercie. –

+0

Ouais, désolé à ce sujet. Vous êtes les bienvenus. –

0

Voici une implémentation plus complète avec le fichier E/S. Merci Steve, je me suis basé sur votre réponse. Ce code, contrairement à d'autres postes, a été écrit pour 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()