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”版本中,所有需要做的就是“产生”当前的排列.