Какова была бы большая часть efficient\elegant пути в Python для нахождения индекса первого непустого объекта в списке?
Например, с
list_ = [None,[],None,[1,2],'StackOverflow',[]]
корректный непустой индекс должен быть:
3
>>> lst = [None,[],None,[1,2],'StackOverflow',[]]
>>> next(i for i, j in enumerate(lst) if j)
3
если вы не хотите вызвать ошибку StopIteration
, просто предоставьте значение по умолчанию функции next
:
>>> next((i for i, j in enumerate(lst) if j == 2), 42)
42
P.S. не используйте list
в качестве имени переменной, это встроенная тень.
try:
i = next(i for i,v in enumerate(list_) if v)
except StopIteration:
# Handle...
Один относительно элегантный способ сделать это:
map(bool, a).index(True)
(где "a" - ваш список... Я избегаю имени переменной "list", чтобы не переопределять родную функцию "list")