-1

在 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 工作得更快(我知道它也做得更少)。是否有更快(或者更紧凑)的实现。我尝试用向量插入/删除来实现它,它似乎更慢。

4

1 回答 1

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 倍以上。我错过了什么吗?

于 2013-07-21T11:57:16.027 回答