2016-01-13 76 views
-1

我想創建域名發生器,我有這樣的關鍵字列表>如何從關鍵字列表中生成所有組合?

mare italia offerte agosto 2013 
mare italia 2013 offerte 
mare italia villaggi 
mare italia last second 
mare italia vacanze 
mare italia last minute 2012 
mare italia offerte agosto 2012 
mare italia offerte last minute 
mare italia bello 
mare italia piu bello 
mare italia hotel 
mare italia residence 

我想創建每一行所有可能的組合,我怎麼能在Python這樣做呢?

我需要的輸出是這樣的:

mare italia 
mare italia offerte 
mare italia offerte agosto 
mare italia offerte agosto 2013 
italia offerte agosto 2013 
offerte agosto 2013 
agosto 2013 
2013 agosto 
offerte 2013 
2013 offerte 
offerte italia 
... more 

我開始Python代碼是:

database = open('keywords.txt', 'r').readlines() 
for line in database: 
    print line 
+1

看一看'itertools'功能'combinaisons'和'permutations' – asimoneau

回答

0

這將打印所有線條分明

from itertools import combinations 


final=set() 

with open('keywords.txt') as file: 
    for line in file: 
     words=line.strip().split() 
     for i in range(2,len(words)): 
      for j in combinations(words,i): 
       final.add(' '.join(j)) 

print '\n'.join(final) 
+0

由於集合是無序的,因此可以以任意順序打印行。 –

+0

非常感謝你 – kingcope

+0

@eugeney我懷疑訂單的問題 –

0

你可以使用itertools.combinations

from itertools import combinations 

seen = set() # keep track of printed lines 

with open("keywords.txt") as f: 
    for line in f: 
     words = line.rstrip().split() 

     for i in range(2, len(words)): 
      for c in combinations(words, i): 
       l = " ".join(c) 
       if l not in seen: 
        print(l) 
        seen.add(l) 
+0

是最後'if'循環REQD如果你加入了一組 –

+0

@Kaustav原因:因爲如果某行是在集合,它已經已打印。 –