2009-08-27 2 views
67

У меня есть список в Python, и я хочу проверить, являются ли какие-либо элементы отрицательными. Specman имеет метод has() для списков, который делает:Pythonic способ проверить, выполнено ли условие для любого элемента списка

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

Где it является Specman ключевое слово отображается на каждый элемент списка, в свою очередь.

Я нахожу это довольно элегантным. Я просмотрел Python documentation и не нашел ничего подобного. Лучшее, что я мог придумать, было:

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

Я нахожу это довольно неэлегантным. Есть ли лучший способ сделать это в Python?

ответ

118

any():

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

Кроме того, если вы собираетесь использовать "Правда в ...", сделать это выражение генератора, так что не занимает O (N) памяти:

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

Использование any().

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

Python имеет встроенную функцию any() именно для этой цели.

+0

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

+1

Вместо сложного ifilter thingie просто выполните: def any (it): для el в нем: if el: return True; return False – Rory

Смежные вопросы