Генерация подмножеств перестановочного списка слов в Python - PullRequest
5 голосов
/ 13 декабря 2010

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

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

from itertools import permutations

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

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

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

word1word2word3
word1word3word2
...
word3word2word1

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

word1    
word1word2
word2word1
...

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

Ответы [ 2 ]

6 голосов
/ 13 декабря 2010

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

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)

Редактировать: вывод:

word1
word2
word3
word1word2
word1word3
word2word1
word2word3
word3word1
word3word2
word1word2word3
word1word3word2
word2word1word3
word2word3word1
word3word1word2
word3word2word1
0 голосов
/ 31 августа 2014

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