forループを実行してリストのエントリを変更するにはどうすればよいですか?同様に、行リストに保存される[line.strip() for line in lines]
ことを除いて、と同等です。line.strip()
これが必要なのは、リストに保存されている大きなデータセットを使用しているためです。このデータセットは、分類器をトレーニングするためのマシントレーニングに使用されます。具体的には、NLTKライブラリを使用した自然言語処理。したがって、アレイの複製は実行できません。
結果を同じインスタンスに保存しますかlines
(新しいリストインスタンスに置き換えないでください)?
lines[:] = [line.strip() for line in lines]
私があなたを正しく理解しているなら、あなたは完全に新しいリストを作成するのではなく、その場でファイルから行を削除しようとしています。問題は、Pythonでは文字列が不変であるため、その場で文字列を変更できないため、新しい文字列を作成する必要があることです。
他の人が示唆しているように、ジェネレータ式は、すべてを新しいリストに格納するのではなく、必要に応じてストリップされた文字列を生成し、メモリの需要を減らします。本当に文字列を所定の位置から取り除きたい場合は、次のようなものでうまくいきます。
for i, line in enumerate(lines): lines[i] = line.strip()
しかし、とにかく新しいリストを作成する方が速いかもしれません。
これはどう:
lines = [line.strip() for line in lines]
これにより、別のリストが作成されます(ただし、すべてメモリに保存されるため、多くの行で問題が発生する可能性があります)。
または、代わりにジェネレータ式を使用して、潜在的なメモリの問題を回避し、オンデマンドで行を作成することもできます。
lines = (line.strip() for line in lines)
ジェネレータ式を使用すると、すべての行が同時に保持されることはありません。
glines = (line.strip() for line in lines)