python 查看iterable对象的长度,及将iterable对象转换为list所带来的影响

1.使用len(list(iter_name))查看iterable对象长度,发现iterable对象不再可用

代码如下:

from pathlib import Path

img_path = Path("./img")
img_files = img_path.rglob("*.png")
print(len(list(img_files)))
next(img_files)

执行后,最后一句抛出StopIteration异常

2.原因探究

使用yeld建立了一个生成iterable对象的函数,查看转换为list时,iterable对象具体发生了什么

def yield_test(n):
    for i in range(n):
        yield i
        print("i=", i)
    print("end.")

a = yield_test(5)
list(a)
print(next(a))
输出为:
i= 0
i= 1
i= 2
i= 3
i= 4
end.
StopIteration

可以看到,将iterable对象转换为list时,iterable对象被从头迭代到尾,它已经变成“空”的,再调用就会出现StopIteration异常

3.查看iterable对象长度的正确姿势

仍然可以转换为list对象来查看长度,但需要先将iterable对象深度拷贝一下,不影响其后续使用。
三种查看iterable对象长度的方法详见:https://blog.csdn.net/weixin_34248118/article/details/92677028

python 查看iterable对象的长度,及将iterable对象转换为list所带来的影响

上一篇:【动态规划专练-完全背包】CF189A (1300)


下一篇:Mysql 的事务、索引和视图