Как правильно решить задачу по поиску двух максимальных чисел в списке?

Приветствую

Наткнулся на задачу: найти два максимальных из списка чисел и найти их сумму. Пришла только такая простая мысль:
a = [1,2,39,4,13,4,5,6,7,3,23,2]

a.sort()

a = a[-2] + a[-1]

print(a)

Но в списке же могут быть и текстовые данные.
Как правильно и элегантно решить?
  • Вопрос задан
  • 8330 просмотров
Решения вопроса 3
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
import numbers
b = sorted([x for x in a if isinstance(x, numbers.Number)])
sum(b[-2:])


Вариант без сортировки:
import numbers
import heapq

b = [x for x in a if isinstance(x, numbers.Number)]
sum(heapq.nlargest(2, b))
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
1) очищаешь от нечисел
www.secnetix.de/olli/Python/list_comprehensions.hawk
(перед этим можно и set применить для выкидывания дублей)

2) вычисляешь
Ответ написан
@abcd0x00
Находит два максимальных числа.
>>> def f(seq):
...     m1 = m2 = None
...     for i in seq:
...         if m2 is None:
...             m2 = i
...         elif m1 is None:
...             if i > m2:
...                 m1, m2 = m2, i
...             else:
...                 m1 = i
...         elif i > m2:
...             m1, m2 = m2, i
...         elif i > m1:
...             m1 = i
...     return (m1, m2)
... 
>>> a = [1, 2, 39, 4, 13, 4, 5, 6, 7, 3, 23, 2]
>>> 
>>> f(a)
(23, 39)
>>>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
11 мая 2024, в 00:19
1000 руб./за проект
10 мая 2024, в 23:51
30000 руб./за проект
10 мая 2024, в 23:33
2500 руб./за проект