質問
私は整数のリストを持っていると私は、与えられた制限よりも小さいすべての要素を持つ、新たなリストを作成したい。
a=range(15) #example list
limit=9 #example limit
この問題を解決するための私のアプローチだった。
[i for i in a if i < limit]
私には最初「私は、私のために」かなり冗長に見えます。 Pythonで<私>より良いの実装がありますか?
解決
あなたが使用することができますフィルタする
>>> filter(lambda i: i < limit, a)
[0, 1, 2, 3, 4, 5, 6, 7, 8]
しかし、リストの内包表記は、それを行うための好ましい方法です。
ここではこれについて言いたいことのpythonのドキュメントのです。
リストの内包表記は簡潔を提供します 頼らずにリストを作成する方法 マップ()、フィルタ()を使用すること、および/または ラムダ。結果のリストの定義 リストより明確にすることが多い傾向があります これらの構築物を用いて構築されます。
他のヒント
これは、あなたができる最善についてです。あなたは、フィルタとのより良い行うことができるかもしれませんが、私はそれをお勧めしません。 「私は私のために私は限界に<場合に」:リスト内包はほとんど英語のように読み込むことに注意してください。少し冗長側の場合、これは、読んで理解することが非常に容易になります。
あなたは(フィルタを使用することができます)(少なくともPythonの2.xシリーズで...私はそれが3.0で削除されているかもしれないと思う)。
newlist = filter(lambda item: item < limit, oldlist)
最初の引数は、任意の呼び出し可能(それはとにかくブール値を返す呼び出し可能を使用するのが最善ですので、その結果は、ブール値に強制変換されます)することができ、第二引数は、任意の配列でできます。
よりよいバージョンはリストの内包は、あなたが得ることができる限り素敵ですので、定型コードを必要とします。
このはそれを行うための一つの異なる方法のようになります:
from operator import ge
from functools import partial
filter(partial(ge, limit), a)
(しかし、もしあなたがfilter
を使用した場合は、ナディアの方法する )それを行うための明確な方法だろう。