Je veux filtrer les chaînes de caractères d'une liste en fonction d'une expression régulière.
Y a-t-il quelque chose de mieux que [x for x in list if r.match(x)]
?
Je veux filtrer les chaînes de caractères d'une liste en fonction d'une expression régulière.
Y a-t-il quelque chose de mieux que [x for x in list if r.match(x)]
?
Exemple complet (Python 3) :
Pour Python 2.x, consultez la note suivante
import re
mylist = ["dog", "cat", "wildcat", "thundercat", "cow", "hooo"]
r = re.compile(".*cat")
newlist = list(filter(r.match, mylist)) # Read Note below
print(newlist)
Imprimés :
['cat', 'wildcat', 'thundercat']
Nota:
Pour les développeurs Python 2.x, filter
renvoie déjà une liste. Dans Python 3.x filter
a été modifié pour retourner un itérateur, il doit donc être converti en list
(afin de le voir imprimé joliment).
En fait, les compréhensions de listes sont généralement préférées aux constructions fonctionnelles telles que filter, reduce, lambda, etc.
@Ivo : Ils sont généralement préférés car ils sont généralement plus clairs et souvent plus succincts. Cependant, dans ce cas, le filter
est parfaitement claire et présente beaucoup moins de bruit.
Pour ce faire, sans compiler la Regex au préalable, utilisez un fichier de type lambda
par exemple :
from re import match
values = ['123', '234', 'foobar']
filtered_values = list(filter(lambda v: match('^\d+$', v), values))
print(filtered_values)
Les retours :
['123', '234']
filter()
prend juste un callable
comme premier argument, et renvoie une liste où cet appelant a retourné une valeur "vraie".
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.