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?

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):

1
Koreksi: Jika Anda akan menggunakan True in ..., pertimbangkan kembali dan gunakan anysebagai gantinya.
Aran-Fey


10

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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.