Быстрый Pythonic способ превратить много списков строк в списки с плавающей точкой при ловле ValueErrors

У меня есть около 50 миллионов списков строк в Python, как этот:

["1", "1.0", "", "foobar", "3.0", ...]

И мне нужно превратить их в список поплавков и None, как этот:

[1.0, 1.0, None, None, 3.0, ...]

В настоящее время я использую некоторый код как:

def to_float_or_None(x):
    try:
        return float(x)
    except ValueError:
        return None

result = []
for record in database:
    result.append(map(to_float_or_None, record))

Функция to_float_or_None занимает в общей сложности около 750 секунд (согласно cProfile) ... Есть ли более быстрый способ выполнить это преобразование из списка строк в список значений с плавающей запятой / None?

Обновить
Я определилаto_float_or_None функционировать в качестве основного узкого места. Я не могу найти значительную разницу в скорости между использованиемmap и использование списочных представлений. Я применил подсказку Пауло Скардина, чтобы проверить ввод, и он уже экономит 1/4 времени.

def to_float_or_None(x):
    if not(x and x[0] in "0123456789."):
        return None
    try:
        return float(x)
    except:
        return None

Использование генераторов было для меня новым, так что спасибо за подсказку Cpfohl и Lattyware! Это действительно ускоряет чтение файла еще больше, но я надеялся сэкономить часть памяти, преобразовав строки в числа с плавающей запятой / нет.

Ответы на вопрос(4)

Ваш ответ на вопрос