Пітонічний спосіб перевірити, чи виконується умова для будь-якого елемента списку


111

У мене є список в 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?

Відповіді:


187

будь-який () :

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замість цього.
Аран-Фей


10

У Python є вбудована будь-яка () функція саме для цієї мети.


2.5+ лише В іншому випадку ви повинні зробити функцію, можливо, використовуючи ifilter та винятки, або bool (встановити ((x для x, якщо cond))) тощо.
Грегг Лінд

1
Замість того, щоб складна річ ifilter, просто зробіть: def any (it): для el у ній: if el: return True; повернути Неправда
Рорі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.