aneira rápida Pythonic de transformar muitas listas de strings em listas de carros alegóricos enquanto captura ValueErrors

Tenho cerca de 50 milhões de listas de strings em Python como esta:

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

E eu preciso transformá-los em uma lista de carros alegóricos e Nones como este:

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

Atualmente eu uso algum 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))

A função to_float_or_None leva cerca de 750 segundos (de acordo com o cProfile) ... Existe uma maneira mais rápida de executar essa conversão de uma lista de strings para uma lista de floats / Nones?

Atualiza
Identifiquei oto_float_or_None funciona como o principal gargalo. Não consigo encontrar uma diferença significativa na velocidade entre usarmap e usando a compreensão da lista. Apliquei a dica de Paulo Scardine para verificar a entrada e ela já economiza 1/4 do temp

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

O uso de geradores era novo para mim, então obrigado pela dica Cpfohl e Lattyware! Isso de fato acelera ainda mais a leitura do arquivo, mas eu esperava economizar memória convertendo as seqüências de caracteres em floats / None

questionAnswers(8)

yourAnswerToTheQuestion