Как выбрать наименьшее и наибольшее число в списке, если там есть не только числа?
Мой код:
for a in [7, 2, "abc", 10, 4]:
if largest is None:
largest = a
elif smallest is None:
smallest = a
elif a > largest:
largest = a
elif a < smallest:
smallest = a
Выдаёт ошибку:
TypeError: '>' not supported between instances of 'str' and 'int'
Как исправить?
Ответы (3 шт):
Автор решения: Zhihar
→ Ссылка
вариант 1:
res_min = min(i for i in [7, 2, "abc", 10, 4] if isinstance(i, int))
вариант 2:
res_min = min(filter(lambda i: isinstance(i, int), [7, 2, "abc", 10, 4]))
Автор решения: ПИТОНИСТ версия-3-8
→ Ссылка
Подлиннее, чем у @Zhihar , но тоже решение:
sp=[7, 2, "abc", 10, 4]
sp2=[] #создаём пустой список
[sp2.append(i) for i in sp if type(i)==int] #добавляем в новый список элемент, если его тип - int
print(min(sp2), max(sp2))
Автор решения: SergFSM
→ Ссылка
Всторенные функции min() и max() могут принимать в качестве параметра ключ. Это можно использовать примерно так (при сравнении строки приравниваем +- бесконечности):
f = [7, 2, "abc", 10, 4]
sm = min(f, key=lambda x: x if type(x)==int else float('inf'))
bg = max(f, key=lambda x: x if type(x)==int else -float('inf'))
print(f'{sm = }, {bg = }') # sm = 2, bg = 10