2010-12-13 2 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

시도를 위해 작성되었습니다. –

+0

오, 고마워, 나는 그것을 몰랐다. 따라서 필자가 처음에이 코드를 작성했을 때 필자의 반복 가능한 언어를 목록으로 변환하려는 것이 효과가 없었던 이유가 설명된다. 도! 감사합니다. 다른 사람이이 문제를 겪을 경우를 대비하여 원본 게시물을 편집하여이를 반영합니다. –

+1

이것은 powerset이라고 불립니다. (거의 - powerset에는 빈 집합도 포함됩니다.) –

답변

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) 

편집 : 출력 : 여기에

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

감사합니다. 정확하게 내가 필요한 것. 나는 우리가 초기 버그를 동시에 발견했다고 생각한다. 나는 대답했다. 그러나 그것이 고쳐 졌던 것을 알아 차렸다. 고맙습니다. –

+0

예, 죄송합니다. 천만에요. –

0

파일 I/O와 더 완전한 구현입니다. 스티브, 고맙습니다. list`이 목록에 반복 가능 객체를 변환하는 내장 함수입니다`때문에 이 코드는, 다른 게시물과 달리, 이름`list`을 사용하지 않도록 파이썬 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() 
관련 문제