1

リスト内包表記の場合と同様に、forループでif句を適用する方法があるかどうか疑問に思っています。だから私は似たような構造を探しています

[ expression for item in list if conditional ]

ループ内なので、sth like

for item in list if conditional:
    expression

次の行に条件を追加するだけでよいことはわかっていますが、それをforループに組み込むことができるかどうか疑問に思っていました。

4

3 に答える 3

5

ジェネレーター理解を使用できます

for item in ( x for x in list if condition(x) ):
    pass

これはかなり厄介です、考えてみてください。別のifステートメントを使用します。それはあなたのコードをより良く構造化させます、そしてあなたはあなたのコードをより良く構造化したいと思っています。

于 2012-12-04T14:40:45.117 に答える
2

残念ながら、これには次の方法よりも優れた方法はありません。

for item in iterable:
    if not conditional:
        continue
    # whatever

ジェネレーターを作成することもできますが、通常はそれは一種のやり過ぎです。

iteritems = (item for item in iterable if conditional)
for item in iteritems:
    pass # whatever

もちろん、これをさらに圧縮することもできます。

for item in (item for item in iterable if conditional):
    pass # whatever

しかし、私はこれをもうかなりきれいとは呼びません。continueそんな時は古き良き時代を守りましょう。

于 2012-12-04T14:40:06.663 に答える
0

一般的に、私は@ThiefMasterのアプローチを採用します。別のアプローチを探している場合(条件がどれだけ簡潔で、実際の「実行」部分とどれだけうまく統合できるかに依存します)、機能ルートに移動してfilter()を使用できます。 。

for item in filter(lambda x: conditional, iterable):
    pass #whatever 
于 2012-12-04T18:39:05.160 に答える