Pythonで反復記号の長さを取得するための組み込みの方法はありますか?
2023-08-24 15:06:27
質問
例えば、Pythonのファイルは反復可能で、ファイル内の行を反復します。私は行の数をカウントしたい。
一つの手っ取り早い方法として
lines = len(list(open(fname)))
しかし、これではファイル全体を(一度に)メモリにロードしてしまいます。これはむしろイテレータの目的(メモリ内の現在の行を保持する必要があるだけ)を打ち破ります。
これは動作しません。
lines = len(line for line in open(fname))
のように、ジェネレータには長さがありません。
カウント関数を定義しない限り、これを行う方法はないのでしょうか?
def count(i):
c = 0
for el in i: c += 1
return c
はっきり言って、ファイル全体を読み込まなければならないことは理解しています! 私はただ、一度にメモリに入れたくないだけです。
どのように解決するのですか?
イテラブルを反復処理し、その回数を数えるだけでは、ダメです。それはリストではなくイテラブルであることです。これは本当にPython固有の問題でもありません。古典的なリンクリストのデータ構造を見てください。長さを求めるのはO(n)演算で、要素数を求めるためにリスト全体を反復処理する必要があります。
mcruteが上で述べたように、あなたはおそらくあなたの関数を減らすことができます。
def count_iterable(i):
return sum(1 for e in i)
もちろん、独自の反復処理可能なオブジェクトを定義する場合は、常に
__len__
を自分で実装し、どこかで要素のカウントを保持することができます。
関連
-
[解決済み] Pythonで、あるオブジェクトが反復可能かどうかを判断するにはどうしたらいいですか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] リストの最後の要素を取得する方法
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み] リストの要素数を取得する方法
-
[解決済み] AndroidでPythonを実行する方法はありますか?
-
[解決済み] Pythonで型をチェックする標準的な方法は何ですか?
-
[解決済み] Pythonで複数行のコメントを作成する方法はありますか?
-
[解決済み] Pythonで大きなファイルの行数を安価に取得する方法は?
-
[解決済み] 大きなファイルを一行ずつ読むには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] リスト内の連続した重複を識別する最もPythonicな方法は何でしょうか?
-
[解決済み] 変数が存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] len(generator())の方法 [重複している]
-
[解決済み] ジェネレーター出力の長さ[duplicate]。
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] なぜ(0-6)は-6=偽なのか?重複
-
[解決済み] Django Rest Framework ファイルアップロード
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?
-
[解決済み] ジェネレータ/イテレータのアイテムの数を数える最短の方法は何ですか?