我是python3.x(和yield)的新手,我试图在不使用itertools的情况下生成数字排列。我想即时生成它,因此我使用了yield
关键字,但是在这里我没有得到任何输出。
def nextPermutation(self, nums):
permute_generator = self.permuteHelper(nums, 0, len(nums) - 1)
for item in permute_generator:
print(item)
def permuteHelper(self, a, l, r):
if l == r:
yield a
else:
for i in range(l, r + 1):
a[l], a[r] = a[r], a[l]
self.permuteHelper(a, l + 1, r)
a[l], a[i] = a[i], a[l]
我需要在这里更改什么?
答案 0 :(得分:0)
您的递归案例永远不会产生任何结果,因为您对递归调用的值不做任何事情。对于递归生成器,您可能要使用yield from
。我不确定添加该内容是否会使您的代码生成您期望的排列,但至少应该产生一些值。
def permuteHelper(self, a, l, r):
if l == r:
yield a
else:
for i in range(l, r + 1):
a[l], a[r] = a[r], a[l]
yield from self.permuteHelper(a, l + 1, r) # add yield from here!
a[l], a[i] = a[i], a[l]