Как отсортировать список, состоящий из чисел и строк?

Есть некий список, состоящий из чисел и строк. Нужно создать новый список, который будет содержать все числа из первого списка, отсортированные по возрастанию, но не содержать строки (т.е. все строки нужно пропустить). Знаю как сделать, используя перебор в цикле, но интересует более продуктивный и лаконичный подход, если такой имеется)

list = [10, 15, 2, 1, 4, '', 6, 6, '', 12, 5, 4]

Вывод должен быть следующим:

new_list = [1, 2, 4, 4, 5, 6, 6, 10, 12, 15]

Ответы (1 шт):

Автор решения: Dmitry

Через list comprehensions

Только для int

list_ = [10, 15, 2, 1, 4, '', 6, 6, '', 12, 5, 4]
new_list = sorted([i for i in list_ if isinstance(i, int)])
print(new_list)

#OUT 
# [1, 2, 4, 4, 5, 6, 6, 10, 12, 15]

Если нужны и другие числа, например, вещественные, можно расширить проверку

types_for_check = (int,  float)
list_ = [10, 15, 2, 1, 4, '', 6, 6, '', 12, 5, 4, 0.1, 9.5]
new_list = sorted([i for i in list_ if isinstance(i, types_for_check)])
print(new_list)

# OUT
# [0.1, 1, 2, 4, 4, 5, 6, 6, 9.5, 10, 12, 15]

Только комплексные не смешивайте, а то ошибка в сортировке будет

→ Ссылка