Как мне найти ВСЕ позиции наименьших чисел в списке? (Python) - PullRequest
2 голосов
/ 15 марта 2019

Следующий код ниже возвращает позицию первого наименьшего числа в списке.

xy = [50, 2, 34, 6, 4, 3, 1, 5, 2, 1, 10 ,1] 
t=0
for i in range(len(xy)):
    if xy[i]<xy[t]:        
        t=i
print(t)

out: 6

Я бы хотел получить позиции всех младших чисел. В этом случае это должно быть 6,9,11. Как мне работать в базовом Python?

Ответы [ 2 ]

4 голосов
/ 15 марта 2019

Вы можете использовать предопределенную функцию Python min, чтобы получить минимальное значение в списке, а затем получить индексы значений, равные этому минимуму, используя понимание списка, например:

xy = [50, 2, 34, 6, 4, 3, 1, 5, 2, 1, 10 ,1]
lowest = min(xy)
positions = [i for i, v in enumerate(xy) if v == lowest]
print(positions) # ==> [6, 9, 11]
2 голосов
/ 15 марта 2019

Это должно быть наиболее эффективное решение ЦП, потому что он запускает список только один раз. Решение @Mr Geek должно быть немного лучше в памяти, потому что его путь дает только один список результатов.

xy = [50, 2, 34, 6, 4, 3, 1, 5, 2, 1, 10 ,1]
min_val = sys.maxsize
result = []
for index, num in enumerate(xy):
  if num < min_val:
    min_val = num
    result = [index]
  elif num == min_val:
    result.append(index)

результат теперь содержит [6, 9, 11]

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

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