Python中最快的排列实现

时间:2013-07-21 11:12:32

标签: python

我在python中进行了排列生成的以下实现:

def perms(v):
    '''
    Generates permutations for sequence v
    :param v: sequence for permutations
    '''
    if not v:
        yield ()
    else:
        for p in perms(v[1:]):
            for i in range(len(v)):
                yield p[:i] + (v[0],) + p[i:]

它比itertools.permutations工作得更快(我也知道,它也做得更少)。是否有更快(或者更紧凑)的实现。我尝试用矢量插入/删除实现它,它似乎更慢。

1 个答案:

答案 0 :(得分:3)

>>> timeit.timeit("sum([1 for i in permutations([1, 2, 3, 4, 5])])", setup="from itertools import permutations", number=1000)
0.0829811965812155

>>> timeit.timeit("sum([1 for i in perms([1, 2, 3, 4, 5])])", setup="from test import perms", number=1000)
0.4672438746438843

在这个简单的例子中,你的实现看起来慢了5倍多。我错过了什么吗?