[解決済み] ジェネレーター出力の長さ[duplicate]。
2022-05-01 04:35:58
質問
Python はイーガーイテラブルの長さを取得するための素晴らしいメソッドを提供します。
len(x)
ということです。しかし、ジェネレータ内包や関数で表現される遅延反復記号に対する同様のものは見つかりませんでした。もちろん、以下のようなものを書くのは難しくない。
def iterlen(x):
n = 0
try:
while True:
next(x)
n += 1
except StopIteration: pass
return n
でも、自転車を再実装しているような感覚はぬぐえませんね。
(この関数は引数を破壊してしまうので、本当にそんな関数は存在しないのかもしれません。私の場合は問題ではありませんが)。
追伸:最初の回答についてですが、はい、次のようなものです。
len(list(x))
も有効ですが、その場合、メモリの使用量が大幅に増加します。
追伸:再確認しました... 追伸は気にしないでください、試している間に間違いがあったようです。ご迷惑をおかけして申し訳ありません。
解決方法は?
一般的なケースではできないので、ありません。もし、怠惰な無限生成器があったらどうでしょうか? 例えば
def fib():
a, b = 0, 1
while True:
a, b = b, a + b
yield a
これは決して終了することなく、フィボナッチ数を生成します。 フィボナッチ数を好きなだけ得るには
next()
.
もし本当にアイテムの数を知る必要があるなら、いずれにせよ1回で線形に反復することはできないので、通常のリストなど別のデータ構造を使用すればよい。
関連
-
python call matlab メソッドの詳細
-
PythonはWordの読み書きの変更操作を実装している
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み] print関数の出力をフラッシュする(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 実装 サイバーパンク風ボタン
おすすめ
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
python implement mysql add delete check change サンプルコード
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み] Pythonでイテレータの要素数を取得する
-
[解決済み] len(generator())の方法 [重複している]