2017-07-26 67 views
0

我有5個垂直字符串,它們是按照我的分類器按概率順序生成的。如果分類器的信心非常高,我想保留這種分類,但對於低分類,我希望根據所有可能的組合進行變化。逐行獲取字符串組合

所以我的數據是這樣的:

aa aa aa aa aa 
ab ac aa ad ae 
aa ab af ae ag 

,我想獲得所有可能的組合

aa aa aa aa aa aa aa aa aa aa ... 
ab ac aa ad ae ae ab ac aa ad ... 
aa ab af ae ag aa ab af ae ag... 

我試圖itertools,但我似乎無法找到合適的工具去做這個。有誰知道如何做到這一點?

[更新]

這是我到目前爲止已經試過:

for x in new_lines: 
    for a,b,c,d,e,f,g,h,i,j in permutations(x.split(), 10): 
     print '{} {} {} {} {} {} {} {} {} {}'.format(a.rstrip('\n'), b.rstrip('\n'), c.rstrip('\n'), d.rstrip('\n'), e.rstrip('\n'), f.rstrip('\n'), g.rstrip('\n'), h.rstrip('\n'), i.rstrip('\n'), j.rstrip('\n')) 
+0

它看起來像你想[itertools.permutations](https://docs.python.org/2/library/itertools.html?highlight=permutations#itertools.permutations)函數。 –

+0

@MikeRobins,是的,這是我一直在嘗試itertools。我放10,所以它不會爆炸,但輸出是空的。如果我做5它工作 – badner

+0

5元素集沒有10個元素排列,所以空輸出聽起來是正確的。此外,我建議如果你發現自己輸入重複使用循環和列表的代碼。 –

回答

1

看來你想要的三重組合與替換字符串"aa ab ac ad ae af ag",排除項,所有的元素都是平等的。

代碼

import itertools as it 


iterable = "aa ab ac ad ae af ag".split() 

combs = it.combinations_with_replacement(iterable, 3) 
pred = lambda x: len(set(x)) != 1 
results = list(filter(pred, combs)) 
transposed = list(zip(*results)) 

演示

>>> for line in transposed: 
...  print(line) 
('aa', 'aa', 'aa', 'aa', 'aa', 'aa', 'aa', 'aa', 'aa', 'aa', 'aa', ...) 
('aa', 'aa', 'aa', 'aa', 'aa', 'aa', 'ab', 'ab', 'ab', 'ab', 'ab', ...) 
('ab', 'ac', 'ad', 'ae', 'af', 'ag', 'ab', 'ac', 'ad', 'ae', 'af', ...) 

選項

您可以在同一行簡化此代碼作爲發電機:

transposed = zip(*(i for i in it.combinations_with_replacement(iterable, 3) if len(set(i)) != 1))