如何将函数应用于变量输入列表?
对于例如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
是内置的。这只是一个例子。
答案 0 :(得分:41)
>>> 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中,map
和filter
构造迭代器而不是列表,因此如果您使用的是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