Я пытаюсь получить самые высокие и вторые самые высокие значения из списка а. Мне также нужно отслеживать, какое значение индекса было для каждого из этих значений.
Например:
a = [1,2,7,9,3,4]
Пожеланная выходная мощность:
maxVal = 9
secondMax = 7
index_max = 3
index_secondMax = 2
Есть ли у кого-нибудь предложения о том, как подойти к этому, похоже, не может найти способ сделать это.
6 ответов
Используйте sorted
и list.index
:
MaxVal, secondMax = sorted(a)[-2:]
index_max = a.index(MaxVal)
index_secondMax = a.index(secondMax)
secondMax, Max = sorted(a)[-2:]
index_max = a.index(Max)
index_secondMax = a.index(secondMax)
Numpy - настоящий бог для таких вещей
import numpy as np
a = [1,2,7,9,3,4]
b = np.sort([(v, i) for i, v in enumerate(a)])
maxVal = b[-1, 0]
index_max = b[-1, 1]
secondMax = b[-2, 0]
index_sec_max = b[-2, 1]
print(maxVal)
print(secondMax)
print(index_max)
print(index_sec_max)
import numpy as np
a = [1,2,7,9,3,4]
max_value = np.sort(a)[-1]
max_value2 = np.sort(a)[-2]
int(np.squeeze(np.where(a == max_value))),int(np.squeeze(np.where(a == max_value2)))
Вы можете использовать enumerate
, чтобы связать значения с их индексами, отсортировать по второму значению (значение, а не его индекс) и сохранить последние
from operator import itemgetter
a = [1,2,7,9,3,4]
res = list(sorted(enumerate(a), key=itemgetter(1)))[-2:]
print(res) # [(2, 7), (3, 9)]
print("1st Max", res[-1][1], "at", res[-1][0]) # 1st Max 9 at 3
print("2nd Max", res[-2][1], "at", res[-2][0]) # 2nd Max 7 at 2
Решение с использованием сортировки является самым чистым, но для длинных списков это может быть быстрее (линейная сложность):
a = [1,2,7,9,3,4]
index_max, maxVal = max(enumerate(a), key=lambda x:x[1])
index_secondMax, secondMax = max([t for t in enumerate(a) if t[0] != index_max], key=lambda x:x[1])
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.