所以这是我的两个函数,它们返回字符串的所有排列。
def permutations(sequence):
if len(sequence) <= 1:
return [sequence]
else:
l = []
perms = permutations(sequence[1:])
for perm in perms:
for index in xrange(len(perm)+1):
l.append(perm[:index]+sequence[0]+perm[index:])
return l
和
def permutations_gen(sequence):
if len(sequence) <= 1:
yield sequence
else:
for perm in permutations_gen(sequence[1:]):
for index in xrange(len(perm)+1):
yield perm[:index] + sequence[0] + perm[index:]
在我看来,第二个 - 生成器 - 应该比第一个更快,特别是在使用大字符串运行时。毕竟,一个长度为11的字符串有39916800个排列,看起来,因为第一个函数在内存中存储了这么多列表,所以生成器会快得多。
但是当我计算这两个时,第一个几乎总是更快,但它们非常接近。为什么发电机不会更快?
另外,我一直试图想出一种迭代生成排列的方法,没有递归调用,但却想不出办法。我该怎么做呢?