产生数字排列的产量

时间:2018-07-20 02:36:36

标签: python python-3.x generator

我是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]

我需要在这里更改什么?

1 个答案:

答案 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]