問題タブ [generator-expression]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 合計にreduce/map/list内包表記を使用するには?
上記の方程式があり、赤で下線が引かれた総和を計算したいのですが、[ρ0,ρ1,ρ2,...,ρN] は最初にリストです。
for ループは確実に問題を解決できます。しかし、もっと簡潔な pythonic スタイルがあるかどうか疑問に思っていました。reduce 関数を試してみましたが、リストの直接和または乗算でしか機能しないようです。上記のような合計に取り組む方法は何ですか?
python - リスト内包表記はPython 3の「リスト(ジェネレーター式)」の構文糖衣ですか?
list
Python 3 では、リスト内包表記は関数に供給されるジェネレーター式の単なる構文糖ですか?
たとえば、次のコードです。
実際にバックグラウンドで次のように変換されますか?
私は出力が同一であることを知っており、Python 3 はリスト内包表記が持っていた周囲の名前空間への驚くべき副作用を修正しますが、CPython インタープリターがフードの下で行うことに関して、前者は後者に変換されますか、または何か違いがありますか?コードがどのように実行されるか
バックグラウンド
この質問のコメント セクションでこの同等の主張を見つけました。Google で簡単に検索すると、同じ主張がここで行われていることがわかりました。
What's New in Python 3.0 docsにもこれについての言及がありましたが、言葉遣いはややあいまいです:
また、リスト内包表記には異なるセマンティクスがあることに注意してください。リスト内包表記は、list() コンストラクター内のジェネレーター式のシンタックス シュガーに近く、特にループ制御変数が周囲のスコープに漏れなくなりました。
python - 繰り返し変数が使用されていない、よりコンパクトなリスト内包表記
次の命令のように、一定の回数呼び出す必要があるサンプリング関数がいくつかあります。
特に_unused
変数を避けることによって、そのステートメントを表現するよりコンパクトな方法があるのだろうか?
python - これらのジェネレータ式の動作が異なるのはなぜですか?
これら 2 つのコード フラグメントは、リストの作成方法のみが異なります。1 つは を使用し[]
、もう1 つは を使用しlist()
ます。
これは iterable を消費し、次に a を発生させStopIteration
ます:
これはイテラブルを消費し、空のリストを出力して永久にループします。
この行動のルールは何ですか?
python - リスト内包表記とジェネレーター式での yield
次の動作は、私にとってかなり直感に反するようです (Python 3.4):
最後の行の中間値は、実際には常にNone
ではなくsend
、ジェネレーターに入力したものであり、次のジェネレーターと同等 (推測) です。
これらの 3 つの行がまったく機能するのはおかしいと思います。リファレンスには、yield
関数定義でのみ許可されていると書かれています(ただし、間違って読んでいる可能性や、単に古いバージョンからコピーされた可能性があります)。最初の 2 行SyntaxError
は Python 2.7 で a を生成しますが、3 行目は生成しません。
また、奇妙に思える
- リスト内包表記はリストではなくジェネレーターを返すこと
- また、リストに変換されたジェネレータ式と対応するリスト内包表記には異なる値が含まれています。
誰かがより多くの情報を提供できますか?
python - このジェネレータ式関数がループ バージョンよりも遅いのはなぜですか?
私は、ジェネレーター式は通常のループよりも効率的である傾向があるという理論に基づいて操作してきました。しかし、次の例に出くわしました。数値N
といくつかの因数を指定して、少なくとも 1 つの因数の倍数であるps
すべての数値の合計を返す関数を作成します。N
ループ バージョンと短いジェネレーター式バージョンを次に示します。
おそらく理解バージョンの方が少し速いかもしれませんが、2つのパフォーマンスはほぼ同じであると期待していましたが、私が期待していなかったのは次のとおりです。
4 倍遅くなるのも間近ではありません。なんで?私は何を誤解していますか?