Фильтрация и подсчет в смешанном списке с помощью лямбда-функции

Задан какой-то смешанный список: 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)))
→ Ссылка