2011-05-17 9 views
5

Estoy buscando 'limpiar' una lista excluyendo cualquier elemento que contenga caracteres distintos de 0-9 y preguntándome si existe una manera más eficiente que, p.La manera más eficiente de eliminar entradas de la lista no numérica

import re 
invalid = re.compile('[^0-9]')  
ls = ['1a', 'b3', '1'] 
cleaned = [i for i in ls if not invalid.search(i)] 
print cleaned 
>> ['1'] 

Como voy a estar operando en las listas de grandes-ish (5k) artículos de cadenas largas (15 caracteres).

Respuesta

11

¿Hay algún problema con el método de cadena isdigit?

>>> ls = ['1a', 'b3', '1'] 
>>> cleaned = [ x for x in ls if x.isdigit() ] 
>>> cleaned 
['1'] 
>>> 
+0

Sí, eso va a hacer muy bien. – urschrei

+1

+1, otra posibilidad sería 'limpiado = filtro (str.isdigit, ls)' – eumiro

+1

@eumiro, cierto, pero eso es menos menos pitónico y también solo funciona para objetos 'str' exactos - @ La solución de MattH funciona para' str ',' unicode', y cualquier otro objeto que tenga un método 'isdigit()' (pato). –

0

Puede utilizar la función isnumeric. Comprueba si la cadena consta de solo caracteres numéricos. Este método está presente solo en objetos Unicode. No va a trabajar con números enteros o valores flotantes

myList = ['text', 'another text', '1', '2.980', '3'] 
output = [ a for a in myList if a.isnumeric() ] 
print(output)  
# Output is : ['1', '3'] 

Ref: https://www.tutorialspoint.com/python/string_isnumeric.htm

Cuestiones relacionadas