可以在Python中重置迭代器吗?

发布于 2021-01-29 15:08:28

我可以在Python中重置迭代器/生成器吗?我正在使用DictReader,并希望将其重置为文件的开头。

关注者
0
被浏览
82
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我看到很多建议itertools.tee的答案,但这忽略了文档中的一项重要警告:

    此itertool可能需要大量辅助存储(取决于需要存储多少临时数据)。一般来说,如果一个迭代器使用大部分或全部的数据的另一个前开始迭代器,它是更快地使用list()代替tee()

    基本上,tee是专为那些在两个(或更多)一个迭代器的克隆,而相互“同步失控”,不这样做的情况 由多
    -相反,他们在相同的“附近”说(一彼此后面或前面的几个项目)。不适合OP的“从头开始重做”问题。

    L = list(DictReader(...))另一方面,只要字典列表可以舒适地存储在内存中,就非常适合。可以随时使用制作新的“从头开始的迭代器”(非常轻巧且开销低)iter(L),并且可以部分或全部使用它,而不会影响新的或现有的迭代器;其他访问模式也很容易获得。

    正如正确回答的几个答案所述,在特定情况下,csv您还可以.seek(0)使用基础文件对象(一种特殊情况)。我不确定它是否已记录在案并得到保证,尽管目前可以使用。仅对真正巨大的csv文件可能值得考虑,list我建议在其中使用通用方法,因为一般方法的内存占用量太大。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看