Función Pythonic rápida para convertir muchas listas de cadenas en listas de flotadores mientras captura ValueErrors

Tengo alrededor de 50 millones de listas de cadenas en Python como esta:

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

Y necesito convertirlos en una lista de carrozas y Nones como este:

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

Actualmente uso un código como:

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))

La función to_float_or_None tarda en total unos 750 segundos (según cProfile) ... ¿Existe una forma más rápida de realizar esta conversión de una lista de cadenas a una lista de flotantes / Nones?

Actualiza
I había identificado lato_float_or_None funciona como el cuello de botella principal. No puedo encontrar una diferencia significativa en la velocidad entre usarmap y usando listas de comprensión. Apliqué la punta de Paulo Scardine para verificar la entrada, y ya ahorra 1/4 del tiempo.

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

El uso de generadores era nuevo para mí, ¡así que gracias por el consejo Cpfohl y Lattyware! De hecho, esto acelera aún más la lectura del archivo, pero esperaba ahorrar algo de memoria al convertir las cadenas en flotantes / Nones.

Respuestas a la pregunta(8)

Su respuesta a la pregunta