for x in [temp for temp in xlist if temp<=xmax]:
このコードは機能しますが、for ループを開始するための不必要に異質な方法のように見えます。
よりクリーンな構文はありますか?
for x in [temp for temp in xlist if temp<=xmax]:
このコードは機能しますが、for ループを開始するための不必要に異質な方法のように見えます。
よりクリーンな構文はありますか?
ここで何をしようとしていますか?
for x in xlist:
if x > xmax: continue
動作します。(for ループの残りの部分は何をしますか?) list-comp のみを使用して達成できる場合は、それが良い方法かもしれません。できない場合は、おそらく上記のイディオム、またはここに投稿された他の回答に表示されるバリアントが必要です。
for x in xlist:
if x <= xmax:
#do stuff
余談ですが、可能であれば、元のバージョンでジェネレーター式を使用することをお勧めします。これは、不要なリストを事前に作成しないためです。
for x in (temp for temp in xlist if temp <= xmax):
#etc.
なぜfilter
ですか?
filter(function, iterable)
filter(function, iterable)
と同等です[item for item in iterable if function(item)]
あなたの場合:
filter(lambda item: item <= xmax, xlist)
for x in filter(lambda x: x<=xmax, xlist):
pass
# or with itertools (faster on python2, on py3 these are equivalent):
import itertools
for x in itertools.ifilter(lambda x: x<=xmax, xlist):
pass
ただし、コード全体をリスト内包表記として書き直すことができる可能性があることを示唆する@mgilsonの回答も見てください。