Cara pythonic untuk memeriksa apakah suatu kondisi berlaku untuk elemen apa pun dari daftar

111

Saya memiliki daftar dengan Python, dan saya ingin memeriksa apakah ada elemen yang negatif. Specman memiliki has()metode untuk daftar yang melakukan:

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

Di mana itkata kunci Specman dipetakan ke setiap elemen daftar secara bergantian.

Saya merasa ini agak elegan. Saya melihat-lihat dokumentasi Python dan tidak dapat menemukan yang serupa. Yang terbaik yang bisa saya dapatkan adalah:

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

Saya merasa ini agak janggal. Apakah ada cara yang lebih baik untuk melakukan ini dengan Python?

Nathan Fellman
sumber

Jawaban:

187

any () :

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

Selain itu, jika Anda akan menggunakan "True in ...", jadikan sebagai ekspresi generator sehingga tidak membutuhkan O (n) memori:

if True in (t < 0 for t in x):
Ken
sumber
1
Koreksi: Jika Anda akan menggunakan True in ..., pertimbangkan kembali dan gunakan anysebagai gantinya.
Aran-Fey
29

Gunakan any().

if any(t < 0 for t in x):
    # do something
Daniel Pryden
sumber
10

Python memiliki fungsi built in any () untuk tujuan ini.

Rory
sumber
2.5+ saja. Jika tidak, Anda harus membuat sebuah fungsi, mungkin menggunakan ifilter dan pengecualian, atau bool (set ((x for x if cond))) atau sejenisnya.
Gregg Lind
1
Daripada hal ifilter yang rumit, lakukan saja: def any (it): for el in it: if el: return True; return False
Rory