Питонический способ проверки выполнения условия для любого элемента списка


112

У меня есть список на 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?

Ответы:


188

любой () :

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 имеет встроенную функцию any () именно для этой цели.


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

1
Вместо сложной штуки с фильтром ifilter просто выполните: def any (it): for el in it: if el: return True; return False
Рори
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.