【问题标题】:yield to generate permutation of numbers产生数字排列
【发布时间】:2018-07-20 02:36:35
【问题描述】:

我是 python3.x(和产量)的新手,我正在尝试在不使用 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]

我需要在这里更改什么?

【问题讨论】:

    标签: python python-3.x generator


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2014-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-22
      相关资源
      最近更新 更多