Python - Нахождение индекса первого непустого объекта в списке

Какова была бы большая часть efficient\elegant пути в Python для нахождения индекса первого непустого объекта в списке?

Например, с

list_ = [None,[],None,[1,2],'StackOverflow',[]]

корректный непустой индекс должен быть:

3
8
задан Jonathan 12 July 2010 в 15:21
поделиться

5 ответов

>>> 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 в качестве имени переменной, это встроенная тень.

17
ответ дан 5 December 2019 в 06:22
поделиться
try:
    i = next(i for i,v in enumerate(list_) if v)
except StopIteration:
    # Handle...
2
ответ дан 5 December 2019 в 06:22
поделиться
next(i for (i, x) in enumerate(L) if x)
1
ответ дан 5 December 2019 в 06:22
поделиться
next(i for i, v in enumerate(list) if v)
0
ответ дан 5 December 2019 в 06:22
поделиться

Один относительно элегантный способ сделать это:

map(bool, a).index(True)

(где "a" - ваш список... Я избегаю имени переменной "list", чтобы не переопределять родную функцию "list")

6
ответ дан 5 December 2019 в 06:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: