Как узнать порядковый номер всех конкретных чисел в списке в Python - PullRequest
0 голосов
/ 23 октября 2018

Посмотрите на следующий список чисел:

dlist = [23.0, 28.6, 32.9, 34.9, 34.2, 31.0, 25.9, 20.1, 15.0, 11.8, 11.1, 13.1, 17.4, 23.0, 28.6, 32.9, 34.9, 34.2, 31.0, 25.9, 20.1, 15.0, 11.8, 11.1, 13.1, 17.4]

Теперь я пытаюсь найти номера индексов всех чисел в списке, которые больше 25. Затем я хочу составить список этихиндексные числа.

for i in dlist:
    if i >= 25:
        checklist.append(list_degrees.index(i))

Теперь проблема в том, что он регистрирует некоторые индексные номера дважды.Например: мы видим первое число выше 25: 28,6.Это число имеет индекс номер 1. Если мы посмотрим дальше, мы снова увидим 28.6, это должно иметь индекс номер 14. Вместо этого он снова получил индекс номер 1.

Здесь вы видите мой «неправильный» вывод:

[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]

Будет ли у кого-нибудь ответ на мою проблему?Заранее спасибо!

Ответы [ 4 ]

0 голосов
/ 23 октября 2018

В качестве альтернативы вы можете использовать функцию , где numpy:

import numpy as np

np.where(np.asarray(dlist) > 25)[0]

# array([ 1,  2,  3,  4,  5,  6, 14, 15, 16, 17, 18, 19])
0 голосов
/ 23 октября 2018

Использование index возвращает индекс первого вхождения этого элемента в вашем списке (https://docs.python.org/3/tutorial/datastructures.html).. Вот почему вы получаете только ранее появившиеся индексы, чтобы собрать все индексы, которые вы хотели бы использовать enumerate

Используйте enumerate и берите только индексы предметов со значением больше 25

res = [i for i, v in enumerate(dlist) if v > 25]
# [1, 2, 3, 4, 5, 6, 14, 15, 16, 17, 18, 19]
0 голосов
/ 23 октября 2018

Вы можете сделать это, как в примере ниже:

dlist = [23.0, 28.6, 32.9, 34.9, 34.2, 31.0, 25.9, 20.1, 15.0, 11.8, 11.1, 13.1, 17.4, 23.0, 28.6, 32.9, 34.9, 34.2, 31.0, 25.9, 20.1, 15.0, 11.8, 11.1, 13.1, 17.4]

checklist = []
for idx, val in enumerate(dlist):
    if val >= 25:
        checklist.append(idx);

print(checklist);

Причина, по которой ваш код не работает правильно, заключается в том, что index возвращает индекс первое вхождение в этом спискечто приводит к тому, что значения позже в списке отображаются с неправильным индексом, потому что они получают index элемента с тем же значением, которое также появляется ранее в списке.

0 голосов
/ 23 октября 2018
indices_greater_than_5 = [idx for idx,value in enumerate(my_values) if value > 5]

- это один из способов сделать это с помощью простого понимания списка, использующего enumerate для подсчета от 0..len(my_values)-1

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