1. ホーム
  2. python

[解決済み] Pythonでイテレータをリセットすることはできますか?

2022-04-27 09:58:53

質問

Pythonでイテレータ/ジェネレータをリセットすることはできますか? 私はDictReaderを使用しており、それをファイルの先頭にリセットしたいと思います。

どのように解決するのですか?

という回答が多く見受けられます。 itertools.tee しかし、それは、ドキュメントにある一つの重要な警告を無視しています。

<ブロッククオート

このイターツールには、かなりの 補助記憶装置(どの程度 一時的なデータが必要です。 を格納する)。一般に、あるイテレータが がデータのほとんど、あるいはすべてを使用する前に 他のイテレータを開始した方が速い を使用します。 list() ではなく tee() .

基本的に。 tee は、1つのイテレータの2つ(またはそれ以上)のクローンが、互いに"get out of sync"しているときに、そうならないようにするために設計されたものです。 あまりに -- むしろ、同じ近辺(数アイテム後ろか前)で言っています。 OPの問題であるquot;最初からやり直し"には不向きです。

L = list(DictReader(...)) 一方、dictsのリストがメモリに余裕を持って収まる限り、完璧に適しています。 新しいquot;iterator from the start" (非常に軽量でオーバーヘッドが少ない)は、いつでも iter(L) 他のアクセスパターンも簡単に利用できます。

いくつかの回答が正しく指摘したように、特定のケースで csv を使用することもできます。 .seek(0) は、基礎となるファイルオブジェクトです (かなり特殊なケースです)。 この方法が文書化されているかどうか、また保証されているかどうかはわかりませんが、現在のところ動作しています。 list 一般的なアプローチとして私がお勧めするのは、メモリフットプリントが大きすぎることです。