加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 13:43:50 所属栏目:Python 来源:网络整理
导读: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):
    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”版本中,所有需要做的就是“产生”当前的排列.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读