条件がリストの要素に当てはまるかどうかを確認するPythonの方法


110

私はPythonのリストを持っています。負の要素があるかどうかを確認したいと思います。Specmanには、以下has()を行うリストのメソッドがあります。

x: list of uint;
if (x.has(it < 0)) {
    // do something
};

ここitで、Specmanキーワードは、リストの各要素に順番にマップされます。

これはかなりエレガントだと思います。私は目を通したPythonドキュメントと似た何かを見つけることができませんでした。私が思いつくことができる最高のものは:

if (True in [t < 0 for t in x]):
    # do something

これはどちらかと言えば上品ではありません。Pythonでこれを行うより良い方法はありますか?

回答:


186

any()

if any(t < 0 for t in x):
    # do something

また、「True in ...」を使用する場合は、ジェネレータ式にして、O(n)メモリを使用しないようにします。

if True in (t < 0 for t in x):

1
修正:を使用する場合はTrue in ...any代わりに再検討して使用してください。
Aran-Fey


10

Pythonには、まさにこの目的のために、any()関数が組み込まれています


2.5+のみ。それ以外の場合は、おそらくifilterと例外、またはbool(set((x for x if cond)))などを使用して、関数を作成する必要があります。
グレッグリンド

1
複雑なifilterの代わりに、次のようにします。def any(it):el for it:if el:return True; Falseを返す
Rory
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.