Как исправить метод .index (), возвращающий неправильное значение? - PullRequest
1 голос
/ 22 июня 2019

Я пытаюсь получить индекс значений выше 70 из следующего списка:

temperatures = [33, 66, 65, 62, 59, 60, 62, 64, 70, 76, 80, 69, 80, 83, 68, 79, 61, 53, 50, 49, 53, 48, 45, 39]

Но что-то идет не так, когда цикл находит равные значения:

hour_ex = []
for i in temperatures:
    if i > 70:
        hour_ex.append(temperatures.index(i))

print(hour_ex)

Код выше печатает:

[9, 10, 10, 13, 15]

Когда цикл достигает индекса 12, он снова печатает индекс 10, потому что он имеет то же значение.Я не знаю, что происходит.Как я могу это исправить?

Ответы [ 4 ]

2 голосов
/ 22 июня 2019

index - это функция поиска по списку, которая выполняет линейный обход списка, чтобы найти первую позицию данного элемента.Это объясняет ваш вводящий в заблуждение вывод - в случае дубликатов, таких как 80, index() всегда даст вам первый индекс, который он может найти для этого элемента, а именно 10.

Используйте enumerate(), если вызаинтересованы в получении индексов в виде кортежа для каждого элемента списка.

Кроме того, переменная i предлагает индекс, но фактически представляет заданную температуру в списке;это вводящее в заблуждение имя переменной.

temperatures = [33, 66, 65, 62, 59, 60, 62, 64, 70, 76, 80, 69, 80, 83, 68, 79, 61, 53, 50, 49, 53, 48, 45, 39]    
hour_ex = []

for i, temperature in enumerate(temperatures):
    if temperature > 70:
        hour_ex.append(i)

print(hour_ex) # => [9, 10, 12, 13, 15]

Рассмотрите возможность использования понимания списка, которое выполняет операцию фильтрации в перечисляемом списке:

hour_ex = [i for i, temp in enumerate(temperatures) if temp > 70]
1 голос
/ 22 июня 2019

Из документов Python для list.index(x[, start[, end]]):

Возвращает индекс, начинающийся с нуля, в списке элемента first , значение которого равноИкс.Вызывает ошибку ValueError, если такого элемента нет.

Чтобы добиться того, что вы пытаетесь сделать, вы можете сделать следующее:

hour_ex = [i for i, n in enumerate(temperatures) if n > 70]
0 голосов
/ 22 июня 2019
In simple terms, index() method finds the given element in a list and returns its position.

However, if the same element is present more than once, index() method returns its smallest/first position.

Таким образом, если в списке есть повторяющееся значение index вернет наименьший индекс значения

Вы можете попробовать

hour_ex = []
for idx, temper in enumerate(temperatures):
    if temper > 70:
        hour_ex.append(idx)

print(hour_ex)
0 голосов
/ 22 июня 2019

Вы можете использовать диапазон в цикле:

temperatures = [33, 66, 65, 62, 59, 60, 62, 64, 70, 76, 80, 69, 80, 83, 68, 79, 61, 53, 50, 49, 53, 48, 45, 39]

hour_ex = []
for i in range(len(temperatures)):
    if temperatures[i] > 70:
        hour_ex.append(i)

print(hour_ex)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...