小编bbm*_*rva的帖子

列表理解中生成器的过早结束

我在列表推导中使用生成器,并且在其中一个生成器提前结束时获得了一些意外行为.为什么在列表推导之外创建生成器会导致行为发生变化?

我创建的生成器如下:

def inc_range(a,b):
    for i in range(min(a,b), max(a,b) + 1):
        yield i
Run Code Online (Sandbox Code Playgroud)

第一种呼叫方式如下:

[(i,j) for i in inc_range(1,3) for j in inc_range(4,6)]
Run Code Online (Sandbox Code Playgroud)

这给了我以下结果:

[(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]
Run Code Online (Sandbox Code Playgroud)

调用它的第二种方式如下:

a = inc_range(1,3)
b = inc_range(4,6)

[(i,j) for i in a for j in b]
Run Code Online (Sandbox Code Playgroud)

这给了我以下内容:

[(1, 4), (1, 5), (1, 6)]
Run Code Online (Sandbox Code Playgroud)

试验一下,以下两个例子给了我第一个结果:

a = range(1,4)
b = range(4,7)

[(i,j) for i in a for j in …
Run Code Online (Sandbox Code Playgroud)

python list-comprehension generator

9
推荐指数
1
解决办法
352
查看次数

标签 统计

generator ×1

list-comprehension ×1

python ×1