2011-05-17 2 views
5

Je cherche à 'nettoyer' une liste en excluant tous les éléments qui contiennent des caractères autres que 0-9, et je me demande s'il existe un moyen plus efficace que par ex.Manière la plus efficace de supprimer des entrées de liste non numériques

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'] 

Comme je vais fonctionner sur des listes de grandes ish (5k articles) de longues chaînes (15 caractères).

Répondre

11

Quelque chose ne va pas avec la méthode string isdigit?

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

Ouais, ça va très bien. – urschrei

+1

+1, une autre possibilité serait 'nettoyé = filtre (str.isdigit, ls)' – eumiro

+1

@eumiro, vrai, mais c'est à la fois moins Pythonic et ne fonctionne aussi que pour les objets 'str' exacts - la solution de @ MattH fonctionne pour' str ',' unicode', et tous les autres objets qui ont une méthode 'isdigit()' (dactylographie). –

0

Vous pouvez utiliser ISNUMERIC. Il vérifie si la chaîne est composée uniquement de caractères numériques. Cette méthode est présente uniquement sur les objets Unicode. Il ne fonctionnera pas avec les valeurs entier ou flottant

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

Questions connexes