微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 在这个排列生成器中’yield’如何工作?

def perm_generator(lst):
    if len(lst) == 1:
        yield lst
    else:
        for i in range(len(lst)):
            for perm in perm_generator(lst[:i] + lst[i+1:]):
                yield [lst[i]] + perm

这段代码一直困扰着我,因为我不明白产量如何相互连接.我的理解是,收益就像一个回报,但它会暂时停止,直到再次被召回.这些收益率如何运作?

解决方法

它可能有助于查看不使用生成器的版本:

def perm_generator(lst):
    res = []
    if len(lst) == 1:
        return [lst]
    else:
        for i in range(len(lst)):
            for perm in perm_generator(lst[:i] + lst[i+1:]):
                res.append([lst[i]] + perm)
    return res

gen = perm_generator([1,2,3])
print gen # prints [[1,3],[1,3,2],[2,1,1],[3,1]]

正如你所看到的 – 这不是“回归”与“收益”的“发现和替换”.在“返回”版本中,我们需要累积结果,而在“yield”版本中,所有需要做的就是“产生”当前的排列.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐