Кто-нибудь может сказать мне, что не так здесь, в этом цикле?

#python-3.x #list #loops

Вопрос:

  #vl = [40.08, 36.6, 41.0, 35.2, 41.0]  
indices = []                 
for x in vl:
    if x == max(vl):
        indices.append(vl.index(x))
print(indices)
 

**Здесь максимальный элемент 41 присутствует 2 раза в списке при индексах 2 и 4. Таким образом, эти индексы должны быть добавлены к индексам списка. Я получаю результат как [2,2] вместо [2,4]. Может ли кто-нибудь, пожалуйста, сказать мне, что не так с этим кодом? **

Комментарии:

1. .index также возвращает первый индекс значения в списке. Поскольку значения равны, один и тот же индекс возвращается дважды.

2. @MegaIng Спасибо тебе! Пожалуйста, скажите мне, какой метод я могу использовать здесь, чтобы получить результат, который я ищу. Заранее спасибо!

3. для x в диапазоне(len(vl)): если vl[x] == max(vl): индексы.добавить(x) печать(индексы)

4. 👆 🏻 Приведенный выше код сработал для меня

5. Проверять enumerate(vl)

Ответ №1:

Вы получаете, [2, 2] как index() всегда, индекс первого совпадения.

Я думаю, вы хотите проверить enumerate() здесь, так как это даст вам индексы, которые вы ищете, в дополнение к значениям.

Через Понимание Списка:

 vl = [40.08, 36.6, 41.0, 35.2, 41.0]
indices = [index for index, value in enumerate(vl) if value == max(vl)]
print(indices)
 

Через Традиционную Петлю:

 vl = [40.08, 36.6, 41.0, 35.2, 41.0]
indices = []
for index, value in enumerate(vl):
    if value == max(vl):
        indices.append(index)
print(indices)
 

оба должны дать вам:

 [2, 4]
 

Комментарии:

1. Спасибо! Это полезно.