2010-12-13 3 views
5

У меня есть список слов, и мне нужно сгенерировать все возможные перестановки из них с одним оговором.Создание подмножеств перестановленного словаря в Python

В настоящее время я использую следующий код:

from itertools import permutations 

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

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

, который дает выход:

word1word2word3 
word1word3word2 
... 
word3word2word1 

Однако я также нужно, чтобы напечатать подмножества этих слов, таких как:

word1  
word1word2 
word2word1 
... 

Но я не имею ни малейшего представления, как это сделать. С чего начать? Что мне читать?

+0

Try, чтобы избежать использования имени 'list', потому что' list' является встроенной функцией, которая преобразует итерируемую в списки. –

+0

О, спасибо, я этого не знал. Это объясняет, почему попытка конвертировать мою итерабельность в список не работала, когда я изначально написал этот код. Doh! Я ценю это. Я отредактировал исходное сообщение, чтобы отразить это, если кто-нибудь еще столкнется с этой проблемой. –

+1

Это называется силовым элементом (почти - силовой комплект также включает в себя пустой набор) –

ответ

5

Отредактировано:

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: выход:

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

Спасибо, именно то, что мне нужно. Думаю, мы оба заметили исходную ошибку одновременно. Я ответил, но потом заметил, что это исправлено. Спасибо. –

+0

Да, извините. Пожалуйста. –

0

Вот более полная реализация с файлового ввода/вывода. Спасибо Стив, я основывался на вашем ответе. Этого код, в отличие от других постов, был написано для 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()