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”版本中,所有需要做的就是“产生”当前的排列. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |