将函数应用于列表的每个元素

时间:2014-08-01 14:25:16

标签: python list function

如何将函数应用于变量输入列表? 对于例如filter函数返回true值,但不返回函数的实际输出。

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

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

预期输出为:

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

我知道upper是内置的。这只是一个例子。

3 个答案:

答案 0 :(得分:41)

我认为您的意思是使用map代替filter

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

更简单,您可以使用str.upper而不是从string导入(感谢@alecxe):

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

在Python 2.x中,map通过将给定函数应用于列表中的每个元素来构造新列表。 filter通过限制使用给定函数求值为True的元素来构造新列表。

在Python 3.x中,mapfilter构造迭代器而不是列表,因此如果您使用的是Python 3.x并且需要列表,那么列表理解方法将更适合。

答案 1 :(得分:30)

或者,您可以采用list comprehension方法:

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

答案 2 :(得分:0)

有时您需要将函数应用于适当的列表成员。以下代码对我有用:

>>> def func(a, i):
...     a[i] = a[i].lower()
>>> a = ['TEST', 'TEXT']
>>> list(map(lambda i:func(a, i), range(0, len(a))))
[None, None]
>>> print(a)
['test', 'text']

请注意, map()的输出将传递到 list 构造函数,以确保该列表在Python 3中进行了转换。返回的列表填充了 值都不应忽略,因为我们的目的是就地转换列表 a