【问题标题】:How does 'yield' work in this permutation generator?'yield' 在这个排列生成器中是如何工作的?
【发布时间】:2014-09-18 16:37:01
【问题描述】:
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

这段代码一直困扰着我,因为我不明白yields 是如何相互连接的。我的理解是yield 的行为类似于return,但它会暂时停止,直到再次调用它。这些yields 是如何工作的?

【问题讨论】:

标签: python generator permutation yield


【解决方案1】:

查看不使用生成器的版本可能会有所帮助:

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, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]

如您所见 - 这不是“return”与“yield”的“查找和替换”。在“return”版本中,我们需要累积结果,而在“yield”版本中,所有需要做的就是“yield”当前的排列。

【讨论】:

    猜你喜欢
    • 2020-05-25
    • 2013-04-04
    • 2012-07-08
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 1970-01-01
    相关资源
    最近更新 更多