Aplicar a função a cada elemento de uma lista

Como é que aplico uma função à lista de entradas variáveis? Por exemplo, a função filter devolve valores verdadeiros, mas não o resultado real da função.

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

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

o resultado esperado é:

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

Eu sei upper é embutido. Isto é apenas um exemplo.

Author: alecxe, 2014-08-01

2 answers

Acho que queres usar map em vez de filter:

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

Ainda mais simples, você poderia usar str.upper em vez de importar de string (graças a @alecxe):

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

Em Python 2.x, map constrói uma nova lista aplicando uma dada função a cada elemento de uma lista. filter constrói uma nova lista, restringindo aos elementos que avaliam True com uma dada função.

Em Python 3.construir iteradores x, map e filter em vez de Listas, por isso se estiver a usar o Python 3.x e exigir uma lista a abordagem de compreensão da lista seria mais adequado.

 24
Author: mdml, 2014-08-01 15:06:37

Ou, em alternativa, pode tomar um list comprehension abordagem:

>>> mylis = ['this is test', 'another test']
>>> [item.upper() for item in mylis]
['THIS IS TEST', 'ANOTHER TEST']
 13
Author: alecxe, 2014-08-01 14:27:29