Python 生成数字置换的屈服点

Python 生成数字置换的屈服点,python,python-3.x,generator,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 permuteHel

我不熟悉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]

我需要在这里更改什么?

您的递归案例不会产生任何结果,因为您没有对递归调用的值进行任何操作。对于递归生成器,您可能希望使用
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]