2010-12-13 22 views
5

Tengo una lista de palabras y necesito generar todas las permutaciones posibles de estas, con una advertencia.Generar subconjuntos de una lista de palabras permutadas en Python

Actualmente uso el siguiente código:

from itertools import permutations 

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

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

que da la salida:

word1word2word3 
word1word3word2 
... 
word3word2word1 

Sin embargo también necesito que imprima subconjuntos estas palabras, como por ejemplo:

word1  
word1word2 
word2word1 
... 

Pero no tengo la menor idea de cómo hacer esto. ¿Por dónde empiezo? ¿Qué debería leer?

+0

Trate de evitar el uso del nombre de 'list', porque' list' es una función incorporada que convierte iterables a las listas. –

+0

Oh gracias, no lo sabía. Eso explica por qué intentar convertir mi iterable a una lista no funcionaba cuando inicialmente escribí este código. Doh! Lo aprecio. He editado la publicación original para reflejar esto, en caso de que alguien más se encuentre con este problema. –

+1

Esto se llama powerset (casi - el powerset también incluye el conjunto vacío) –

Respuesta

5

Editado:

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) 

Editar: salida:

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

Gracias, precisamente lo que necesito. Supongo que ambos vimos el error inicial al mismo tiempo. Respondí, pero luego noté que había sido reparado. Gracias. –

+0

Sí, lo siento. De nada. –

0

Aquí hay una aplicación más completa con el archivo de E/S. Gracias Steve, me basé en tu respuesta. Este código, a diferencia de otros mensajes, fue escrito para 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() 
Cuestiones relacionadas