Фильтрация и подсчет в смешанном списке с помощью лямбда-функции
Задан какой-то смешанный список: list1 = [4, 'gfg', 2,3, 'best', 'is', 3], необходимо при помощи лямбда-функции подсчитать вещественные числа. Я решил для начал отсортировать смешенный список при помощи:
list1 = ['4', 'gfg', '2,3', 'best', 'is', '3']
float_count = len(list(filter(lambda x: (type(x)=='float'), list1)))
print("Вещественные числа: ", float_count)
Но на выходе получается:
Float numbers: 0
В чем проблема?
Ответы (2 шт):
Автор решения: Александр
→ Ссылка
- Во-первых, как написали в комментарии, в списке только строки. И перед тем, как узнать тип, их хотя бы нужно преобразовать к нужному типу
- Во-вторых, в отличие от js в пайтоне проверка типа возвращает не строковое представление типа, а сам тип, т.е проверка
type(var) == 'float'всегда будет равнаFalse
Что касается решения, то я бы прошел каждый элемент списка регуляркой
floats = list(filter(
lambda x: re.match(r'\d+,\d+$', x, re.M), list1
))
А потом бы взял длину
Автор решения: HateFoube_2002
→ Ссылка
Мне кажется можно было так или я ошибаюсь?
test_list = [4.5, 'gfg', '2', 'best', 'is', '3',5.7]
res = filter(lambda x: isinstance(x, float), test_list)
print("Вещественные числа: ", len(list(res)))