Python

2010-12-13 8 views
5

'da izin verilen bir sözcük listesinin alt kümelerini oluşturma Bir sözcükler listesi var ve bunlardan tek bir uyarı ile bunların tüm olası permütasyonlarını üretmem gerekiyor.Python

Şu anda şu kodu kullanın: çıkışını verir

from itertools import permutations 

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

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

:

Ben de gibi, bu alt kümeleri bu kelimeleri yazdırmak gerekiyor Ancak
word1word2word3 
word1word3word2 
... 
word3word2word1 

:

word1  
word1word2 
word2word1 
... 

Ama bunun nasıl yapılacağı hakkında en ufak bir fikrim yok. Nereden başlamalıyım? Ne okumalıyım?

+0

deneyin için yazılmıştır. –

+0

Oh teşekkürler, bunu bilmiyordum. Bu kodu başlangıçta yazdığımda yinelenen bir listeyi bir listeye dönüştürmeye çalışmamın nedeni açıklanmadı. Doh! Bunu takdir ediyorum. Bu sorunu çözmek için asıl gönderiyi, başka biriyle karşılaştığında düzenledim. –

+1

Buna powerset denir (neredeyse - powerset ayrıca boş kümeyi de içerir) –

cevap

5

Düzenlendi:

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) 

Düzenleme: çıktı: İşte

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

Teşekkürler, tam olarak ihtiyacım olan şey. Sanırım ikimiz de ilk hatayı aynı anda tespit ettik. Cevapladım, ama sonra düzeltildiğini fark ettim. Teşekkür ederim. –

+0

Evet, bunun için üzgünüm. Rica ederim. –

0

dosyası I/O ile daha kapsamlı bir uygulamasıdır. Teşekkürler Steve, kendinize cevabınızı temel aldım. list 'listelerine Iterables dönüştüren yerleşik bir işlevdir `Çünkü Bu kod, diğer mesajların aksine, adı` list' kullanmaktan kaçınmak için 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()