Je souhaite filtrer les chaînes 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)]
?
Vous pouvez créer un itérateur dans Python 3.x ou un liste dans Python 2.x en utilisant:
filter(r.match, list)
Pour convertir le Python 3.x itérateur en une liste, lancez-la simplement; list(filter(..))
.
Exemple complet (Python 3):
Pour Python 2.x examine la note ci-dessous
import re
mylist = ["dog", "cat", "wildcat", "thundercat", "cow", "hooo"]
r = re.compile(".*cat")
newlist = list(filter(r.match, mylist)) # Read Note
print(newlist)
Impressions:
['cat', 'wildcat', 'thundercat']
Remarque:
Pour 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 bien imprimé).
Au cas où quelqu'un viendrait ici à l'avenir, il existe une autre façon de le faire en Pythonic. Vous devez d’abord créer le regex
puis le filter
import re
inilist =["dog", "cat", "wildcat", "thundercat", "cow", "hooo"]
regex = re.compile(r'.*cat')
selectobj = filter(regex.search, inilist)
selectobj
résultats:
['cat', 'wildcat', 'thundercat']