0

整数のリストがあり、すべての要素が指定された制限よりも小さい新しいリストを作成したいと思います。

a=range(15) #example list
limit=9 #example limit

この問題を解決するための私のアプローチは

[i for i in a if i < limit]

私には、最初の「i foriin」はかなり冗長に見えます。Pythonでより良い実装はありますか?

4

4 に答える 4

4

あなたはフィルターを使うことができます

>>> filter(lambda i: i < limit, a)
[0, 1, 2, 3, 4, 5, 6, 7, 8]

しかし、リスト内包はそれを行うための好ましい方法です

これは、Pythonドキュメントがこれについて言っていることです:

リスト内包表記は、map()、filter()、および/またはラムダを使用せずにリストを作成するための簡潔な方法を提供します。結果として得られるリスト定義は、これらの構成を使用して作成されたリストよりも明確になる傾向があります。

于 2009-09-22T14:40:16.357 に答える
2

これはあなたができる最善のことです。フィルターを使えばもっとうまくいくかもしれませんが、私はお勧めしません。リスト内包表記はほとんど英語のように読めることに注意してください:「ifor i in a ifi<limit」。これにより、少し冗長な面があれば、読みやすく、理解しやすくなります。

于 2009-09-22T14:43:39.567 に答える
1

filter()を使用できます(少なくともPython2.xシリーズでは...3.0で削除された可能性があります)

newlist = filter(lambda item: item < limit, oldlist)

最初の引数は任意の呼び出し可能であり(その結果はブール値に強制変換されるため、とにかくブール値を返す呼び出し可能オブジェクトを使用するのが最善です)、2番目の引数は任意のシーケンスにすることができます。

于 2009-09-22T14:40:15.453 に答える
0

より良いバージョンはボイラープレートコードを必要とするので、リスト内包表記はあなたが得ることができるのと同じくらい素晴らしいです。

これは、それを行うための1つの異なる方法になります。

from operator import ge
from functools import partial

filter(partial(ge, limit), a)

(しかし、もしあなたがそれを使うならfilterナディアの方法はそれをする明白な方法でしょう)

于 2009-09-22T14:54:43.307 に答える