問題タブ [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.

0 投票する
4 に答える
3120 参照

python - Pythonで変数「xin」(範囲など)を使用せずにジェネレータ式またはリスト内包表記を作成する

Pythonでは、「x in」変数なしでこのリスト内包表記を書く方法はありますか(完全に未使用のままになっているため)?同じことがジェネレータ式にも当てはまります。これが頻繁に発生することはないと思いますが、私はこれに何度か遭遇し、知りたいと思っていました。

次に例を示します。

(また、これを構築するためのよりエレガントな方法はありますか?)

0 投票する
4 に答える
1883 参照

python - Pythonジェネレータオブジェクトを理解する必要があります

以下では:

any(...)の中にはジェネレーターオブジェクトがあることを理解しています。私が理解していないのは、括弧がないことです-括弧がany()関数に属している場合、ジェネレータ式の周りに別の括弧のセットがあるべきではありませんか?

ありがとう。

0 投票する
3 に答える
6765 参照

python - リスト内包とジェネレータ式の奇妙なtimeitの結果?

私はこの質問に答えていました。ここでジェネレーター式を好み、これを使用しました。ジェネレーターが最初にリスト全体を作成する必要がないため、これはより高速であると思いました。

そして、リーヴォンは彼の解決策でリスト内包表記を使用しました、

しかし、私がこれらのLCのtimeit結果を実行したとき、ジェネレーターよりも高速でした。

次に、リストのサイズを増やして、もう一度時間を計りました。

今回の'd'ジェネレーター検索はLCよりも高速でしたが、真ん中の要素(11)と最後の要素を検索すると、LCが再びジェネレーター式を上回り、理由がわかりません。

0 投票する
3 に答える
250 参照

python - * parametersは怠惰な呼び出しですか?

重複の可能性:
Pythonの可変長引数(* args)は、関数呼び出し時にジェネレーターを拡張しますか?

次のような関数があるとしましょう。

そして、あなたはそれをそのように呼びます:

要素は遅延して呼び出されますか、それとも関数を実行する前にジェネレーターが数百万の要素すべてを実行しますか?

0 投票する
4 に答える
11259 参照

python - Python ジェネレーター式 if-else

Python を使用して大きなファイルを解析しています。私がやりたいことは

これにはジェネレーター式を使用したいと思います-メモリを節約します。実際のコードを入れています。

0 投票する
2 に答える
3030 参照

python - このリスト内包表記が同等のジェネレーター式よりも速いのはなぜですか?

Windows で Python 3.3.1 64 ビットを使用しており、次のコード スニペットを使用しています。

これと比較して、136ミリ秒で実行されます。

これは 146 ミリ秒で実行されます。この場合、ジェネレーター式はリスト内包表記よりも高速または同じ速度であるべきではありませんか?

Guido van Rossum From List Comprehensions to Generator Expressions から引用します。

... Python 3 のリスト内包表記とジェネレーター式の両方が、実際には Python 2 よりも高速です! (そして、2 つの間に速度の違いはなくなりました。)

編集:

で時間を計測しましたtimeit。あまり正確ではないことはわかっていますが、ここでは相対速度のみを気にし、さまざまな反復回数でテストすると、リスト内包バージョンの時間が一貫して短くなります。

0 投票する
1 に答える
2397 参照

python - リスト内包表記の短縮

いくつかの機会に、リスト内包表記またはジェネレーター式を短絡するための Python 構文が必要でした。

これは単純なリスト内包表記であり、Python での同等の for ループです。

この言語では、短絡する内包表記はサポートされていません。提案された構文、および Python の同等の for ループ:

無限シーケンスを含む任意のイテラブルで動作し、ジェネレータ式の構文に拡張できる必要があります。私はlist(itertools.takewhile(lambda x: x != 'potato'), my_list)オプションとして認識していますが、

  • それは特にpythonicではありません-しばらく理解するほど読みやすくはありません
  • おそらくCPythonの理解ほど効率的でも高速でもありません
  • 出力を変換するには追加のステップが必要ですが、それは直接内包することができます。[x.lower() for x in mylist]
  • 原作者でさえあまり好きではないようです

私の質問は、なぜ文法をこのユースケースに拡張するのが良い考えではないのか、それともPython開発者がめったに役に立たないと考えているためにそれが不可能なのかについて、理論的なしわがありましたか? これは言語への単純な追加であり、便利な機能のように思えますが、隠れた機微や複雑さを見落としている可能性があります。

関連: これこれ

0 投票する
1 に答える
60 参照

python - リストを返す関数を呼び出すジェネレータ式

リストを返す関数があり、コンパクト ジェネレーター式 (または適切でコンパクトなもの) を使用してリストで呼び出されたときに、その関数の出力をマージしたいと考えています。

バーが整数である def foo(bar):場所があり、非常に複雑な計算の後にリストを返すとします。

arr=[9,1,5,1,7,1]1行のコードの後、うまくいけばどうすれば取得できますか?

arr=[foo(x) for x in arr]そして、リスト内のリストを[[9,1,5],[1],[7,1]]
ロールアウトするために別の行を書くのは嫌いです。

0 投票する
6 に答える
554 参照

python - ジェネレーターとリスト内包表記を識別する方法

私はこれを持っています:

私の質問は、この場合、リスト内包表記またはジェネレーターオブジェクトを sum に渡すことですか? どうすればそれを伝えることができますか?これに関する一般的なルールはありますか?

また、 sum 自体には、その引数を囲むために一対の括弧が必要であることを覚えておいてください。上記の括弧は合計用であり、ジェネレーターオブジェクトを作成するためのものではないと思います。同意しませんか?