逐行获得字符串组合

时间:2017-07-26 23:47:05

标签: python itertools

我有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,但我似乎找不到合适的工具来做到这一点。有谁知道怎么做?

[UPDATE]

这是我到目前为止所尝试的:

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'))

1 个答案:

答案 0 :(得分: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))