2016-01-13 75 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原因:因为如果某行是在集合,它已经已打印。 –