2017-07-29 43 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,但我似乎无法找到合适的工具来做到这一点。有谁知道如何做到这一点?

这是我到目前为止已经试过:

import sys 
import os 
import itertools 
from itertools import permutations 

in_file = sys.argv[1] 

f1 = open(in_file, 'r') 

new_lines = [] 

for line in f1.readlines(): 
    line = line.strip() 
    do stuff to replace my higher confidence matches... 
     new_lines.append(line) 

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

我测试了10,使确保它没有爆炸,但是这似乎并没有工作,我以为它会的方式。如果我放5,它只给我我以前的同样名单。有什么办法可以做到这一点?

+0

因此,要确认您想要从一组x(5)输入中选择n(10)个对象的每个可能的唯一序列? – leumas95

+1

您可以使用'itertools.product'描述[这里](https://stackoverflow.com/questions/23058028/how-to-get-all-mappings-between-two-lists?rq=1) – Gleland

+0

@ leumas95 。我只是把10停下来。我真的想要每个5元素列表的所有可能的命令。 – badner

回答

3

Python itertools.permutations方法需要一个可迭代的整数限制(r)。例如,如果你有一个排列列表([1,2,3],2)会给你[(1,2),(1,2,3),2),那么这个整数就是用来限制每个排列的长度的。 3),(2,1),(2,3),(3,1),(3,2)]。

该限制不得大于输入列表的长度,否则将返回空的可迭代。

请参阅https://docs.python.org/2/library/itertools.html#itertools.permutations具体“返回的项目数是n!/(n-r)!当0 < = r < = n或当r> n时为零。

相关问题