【问题标题】:when the generator stop for python?当生成器停止 python 时?
【发布时间】:2021-04-01 04:05:10
【问题描述】:

我有类似的python3函数:

def previous_current(iterable):
    it = iter(iterable)
    prv = None
    cur = it.__next__()
    try:
        while True:
            yield prv,cur
            prv = cur
            cur = it.__next__()
    except StopIteration:
        yield prv, None

我发现它的产量自然停止,除了阶段之外不执行。 就像我调用的那样:

s1 = [1,2,3]
g = previous_current(s1)
for i in range(len(s1)):
    pre, cur = next(g)
    print(pre, cur)

打印出来:

None, 1
1, 2
2, 3

我只是不知道我有while True 条件,我认为它会继续运行直到出错。 但为此,它似乎在列表结束时停止。我不知道为什么它会这样运行。我认为它应该给出如下结果:

None, 1
1, 2
2, 3  
3, None

【问题讨论】:

  • for i in range(len(s1)),太短了,加个+1,for i in range(len(s1) + 1)

标签: python-3.x list generator yield


【解决方案1】:

@user504909 - 这是因为你的 range(len(s1)):
因此,如果您想包含 3,那么正如之前的帖子所建议的那样,您应该将其更改为 - range(len(s1)+1) 然后。

The range() function has two sets of parameters, as follows:

range(stop)

stop: Number of integers (whole numbers) to generate, starting from zero. eg. range(3) == [0, 1, 2].

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 2012-04-06
    • 2021-12-24
    • 2011-10-23
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多