我在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工作得更快(我也知道,它也做得更少)。是否有更快(或者更紧凑)的实现。我尝试用矢量插入/删除实现它,它似乎更慢。
答案 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倍多。我错过了什么吗?