Python находит первый экземпляр ненулевого числа в списке

У меня есть список, подобный этому

myList = [0.0 , 0.0, 0.0, 2.0, 2.0] 

Я бы хотел найти местоположение первого числа в списке, которое не равно нулю.

 myList.index(2.0) 

Работает в этом примере, но иногда первое ненулевое число будет 1 или 3.

Есть ли быстрый способ сделать это?

8 Solutions collect form web for “Python находит первый экземпляр ненулевого числа в списке”

Используйте next с enumerate :

 >>> myList = [0.0 , 0.0, 0.0, 2.0, 2.0] >>> next((i for i, x in enumerate(myList) if x), None) # x!= 0 for strict match 3 

Использовать фильтр

 >>> myList.index(filter(lambda x: x!=0, myList)[0]) 3 

Вот один лайнер для этого:

 val = next((index for index,value in enumerate(myList) if value != 0), None) 

В основном, он использует next () для поиска первого значения или возвращает None если его нет. enumerate () используется для создания итератора, который выполняет итерацию по индексу, кортежи значений, чтобы мы знали индекс, в котором мы находимся.

Вы можете использовать numpy.nonzero: http://docs.scipy.org/doc/numpy-1.10.1/reference/generated/numpy.nonzero.html

 myList = [0.0 , 0.0, 0.0, 2.0, 2.0] I = np.nonzero(myList) #the first index is necessary because the vector is within a tuple first_non_zero_index = I[0][0] #3 

Использование next с enumerate превосходно, когда массив большой. Для меньших массивов я бы использовал argmax от numpy так что вам не понадобится цикл:

 import numpy as np myList = [0.0, 0.0, 0.0, 2.0, 2.0] myArray = np.array(myList) np.argmax(myArray > 0) 3 

Как насчет использования перечисления? Проверьте документацию перечисления .

 def first_non_zero(mylist): for index, number in enumerate(mylist): if number != 0: # or 'if number:' return index 

Как все это:

 [i for i, x in enumerate(myList) if x][0] 

Просто используйте понимание списка:

 myDict = {x: index for index, x in enumerate(myList) if x} 

myDict[element] ненулевых элементов являются myDict[element] .

  • Получить элемент списка по атрибуту в Python
  • Как вы рассчитываете наибольшее количество повторений в списке?
  • Что такое «гомогенность» в документации по списку Python?
  • бесконечное назначение в списке python?
  • Как я могу отменить список в python?
  • Преобразование 12-часового формата времени в формат времени 24 часа (сохранение записи дня) в python
  • Найдите наименьшее число в списке python и распечатайте позицию
  • Заполнить список или кортеж из вызываемого или лямбда в python
  • Python - лучший язык программирования в мире.