web-dev-qa-db-fra.com

Appliquer une fonction à chaque élément d'une liste

Comment appliquer une fonction à la liste des entrées variables? Par exemple la fonction filter renvoie des valeurs vraies mais pas la sortie réelle de la fonction.

from string import upper
mylis=['this is test', 'another test']

filter(upper, mylis)
['this is test', 'another test']

Le résultat attendu est:

['THIS IS TEST', 'ANOTHER TEST']

Je sais que upper est intégré. C'est juste un exemple.

36
shantanuo

Je pense que vous voulez utiliser map au lieu de filter :

>>> from string import upper
>>> mylis=['this is test', 'another test']
>>> map(upper, mylis)
['THIS IS TEST', 'ANOTHER TEST']

Encore plus simple, vous pouvez utiliser str.upper au lieu d’importer de string (grâce à @alecxe):

>>> map(str.upper, mylis)
['THIS IS TEST', 'ANOTHER TEST']

Dans Python 2.x, map construit une nouvelle liste en appliquant une fonction donnée à chaque élément d'une liste. filter construit une nouvelle liste en se limitant à éléments qui donnent True avec une fonction donnée.

Dans Python 3.x, map et filter construisez des itérateurs au lieu de listes, donc si vous utilisez Python 3 .x et requièrent une liste, l’approche de compréhension de liste conviendrait mieux.

51
mdml

Ou, alternativement, vous pouvez prendre un list comprehension approche:

>>> mylis = ['this is test', 'another test']
>>> [item.upper() for item in mylis]
['THIS IS TEST', 'ANOTHER TEST']
43
alecxe