Как выбрать наименьшее и наибольшее число в списке, если там есть не только числа?

Мой код:

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
→ Ссылка