Получите второе по величине число в списке в линейное времяPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Получите второе по величине число в списке в линейное время

Сообщение Anonymous »

Я получаю второй по величине номер из списка: < /p>
>>> numbers = [20,67,3,2.6,7,74,2.8,90.8,52.8,4,3,2,5,7]
>>> numbers.remove(max(numbers))
>>> max(numbers)
74
< /code>
За исключением того, что простая обработка списка проходит через список дважды: найти самый большой, а затем второй по величине. Это также разрушительно - мне нужно две копии данных, если я хочу сохранить оригинал: < /p>
>>> numbers = [20,67,3,2.6,7,74,2.8,90.8,52.8,4,3,2,5,7]
>>> if numbers[0]>numbers[1]):
... m, m2 = numbers[0], numbers[1]
... else:
... m, m2 = numbers[1], numbers[0]
...
>>> for x in numbers[2:]:
... if x>m2:
... if x>m:
... m2, m = m, x
... else:
... m2 = x
...
>>> m2
74
< /code>
, который проходит через список только один раз, но разве не является неясным, как предыдущее решение. < /p>
Есть ли способ иметь оба? Ясность первой версии, но сингл проходит через второй?

Подробнее здесь: https://stackoverflow.com/questions/162 ... inear-time
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»