問題タブ [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 - 条件付きリスト内包表記
簡単なリストがあります。
リスト内包表記を使用して、そこから新しいリストを作成したいと考えています。
非常に単純ですが、ゼロ以外の要素のみを操作したい場合はどうすればよいでしょうか?
「if」にはリスト内包表記で「else」が必要なので、これを思いつきました。
しかし、望ましい結果は.
私はこのようにそれを行うことができます
または「フィルター」とラムダを使用する
リスト内包表記を使用してこの結果を取得するにはどうすればよいですか?
python - このジェネレーター式を for ループの結果と一致するように変更できますか?
これを for ループと考えてください:
フラットリストy
は同様に取得されません
フラット リストを返すようにジェネレータ式を変更できますか?
python - 同じアイテムの異なる数を追加するジェネレータ内包表記
与えられた:
次のタプルを生成するジェネレータ内包表記は次のとおりです。
の項目はと でmulti
2 回表示さTrue
れFalse
、他の項目は で表示されNone
ます。
python - フィルターまたはジェネレーターによる予期しない結果
これは面白いものです。またはジェネレーターを使用して予期しない結果を見つけたとき、実際に別の質問に対する回答を書いていました。filter
ファイルパスのリストがあります:
パス リストにさまざまなディレクトリのセットを作成します。
そして今、ジェネレーター (またはジェネレーターのジェネレーター) のリストを作成したいと思います。各ジェネレーターにpaths
は、同じディレクトリ内の要素が含まれています。そして、私はそうします:
走った後、私は驚きませんでしたか:
そして、以下を取得します。
これは明らかに間違っています。それでも、次の文を使用すると:
印刷ループは、予想される答えを示しています。
ジェネレーターの代わりにfilter
and/orを使用する場合:map
私も間違った答えを得ます 編集: /map
バージョンfilter
は実際に機能します。
何が起きてる?
python - Python コンテキスト マネージャーはジェネレーターで使用できますか?
サブディレクトリへのアクセスを制御するコンテキスト マネージャを使用しようとしていますが、それをジェネレータ式と組み合わせると非常に洗練されているように見えますが、うまくいかないようです。2つを一緒に使用できるように、これを修正する方法はありますか?
次に例を示します。
python - 複数の (類似した) ジェネレーター式の使用
csv ファイルで、特定の文字を他の文字に置き換えようとしています。
私の現在のコードはこれに似ています:
この例では、ジェネレータ式を 3 つしか使用していませんが、簡単にそれ以上にすることもできます。
これを行う正しい方法を知っている人はいますか?私の懸念は、この構造が最速ではない可能性があることです (そして確かに最適に見えません)。
python - Python ジェネレータ式の順序
Python ジェネレーター式の反復順序が、類似のリスト内包表記およびジェネレーター関数とは異なるように見える例があります。
たとえば、コード
出力があります
リスト内包表記の場合と同様に、ジェネレーター式が順序付けられた出力を生成することを期待します。順序が保証されていないと言うジェネレータ式について何かありますか?
構造はほぼ同じなのに、ジェネレーター式の順序が他のものと異なるのはなぜですか? 辞書を反復するのと同じ順序でさえないので、それを延期しているようには見えません。
Python 2 と 3 で同じ動作が見られます。
python - next() は Python の any/all でうまく動作しません
今日、値を抽出するために使用していたために発生したバグをnext()
見つけましたが、「見つかりません」はStopIteration
.
通常、それはプログラムを停止しますが、使用している関数は反復next
内で呼び出されていたため、は早期に終了して返されました。all()
all
True
これは予期される動作ですか? この種のことを避けるのに役立つスタイルガイドはありますか?
簡単な例:
python - ジェネレーター式は、リスト内包表記に比べて作業が少ないですか?
コードの一部をリファクタリングしているときに、次のことに気付きました。
次に、load_products()
SQL クエリを実行し、すべての製品に対して:
- 一部の比較的 CPU コストの高い操作を実行し、次のことを行います。
yield
商品を1点ずつご注文者様に返却する際に使用します。
私が理解しているように、リスト内包表記とジェネレータ式の違いは、リスト内包表記の場合、最初の製品が一致した場合でも、すべての製品がデータベースからロードされて処理されるということです。
したがって、次のようなジェネレータ式に置き換えると:
最終的に作業を減らすことでコードを改善できます。つまり、一致が見つかると、次の製品はデータベースから読み込まれず、処理もされません。
それでも、確かに私はPythonをよく知りません。
私は正しいですか?Python は一致を見つけるとすぐに停止しますか? それとも、両方のコードが同じように実行され、データベースからすべての製品をロードしますか?