2010-05-04 6 views
2

У меня есть список, который содержит целый ряд вещей:Есть ли более простой способ получить первое появление чего-то?

lista = ['a', 'b', 'foo', 'c', 'd', 'e', 'bar'] 

Я хотел бы получить первый элемент в списке, который выполняет предикат, скажем len(item) > 2. Есть ли более аккуратный способ сделать это, чем отключение itertools, а затем?

first = next(itertools.dropwhile(lambda x: len(x) <= 2, lista)) 

я использовал [item for item in lista if len(item)>2][0] на первом, но это требует питона, чтобы генерировать весь список первым.

ответ

7
>>> lista = ['a', 'b', 'foo', 'c', 'd', 'e', 'bar'] 
>>> next(i for i in lista if len(i) > 2) 
'foo' 
+1

Обратите внимание, что следующая функция была добавлена ​​в 2.6. Если вам нужна совместимость с 2.5 или 2.4, тогда используйте '(i для i в списке, если len (i)> 2) .next()' –

+0

Всегда забывайте генераторы ... –

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