如何获得列表的所有可能订单

时间:2017-07-29 22:39:18

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

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

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它给了我以前的相同列表。有没有办法可以做到这一点?

1 个答案:

答案 0 :(得分:4)

Python itertools.permutations方法接受可迭代和整数限制(r)。

整数用于限制每个排列的长度,例如,如果你有一个排列列表([1,2,3],2)会给你[(1,2),(1,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时为零。”

相关问题