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

Posted

技术标签:

【中文标题】将函数应用于列表的每个元素【英文标题】:Apply function to each element of a list 【发布时间】:2014-09-24 18:51:39 【问题描述】:

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

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

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

预期的输出是:

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

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

【问题讨论】:

【参考方案1】:

我认为您的意思是使用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 并需要列表,则列表解析方法会更适合。

【讨论】:

map(str.upper, mylis) 也可以,有助于避免 string 导入。 请注意 map 仅在 python2.x 上构造 list -- 在 python3.x 上它返回一个迭代器。通常这并不重要,但是如果需要一个列表作为输出,那么最好使用列表推导式作为另一个答案。 副作用函数的方法是否相同? 在 Python 3.x 中,您可以使用 list(map(str.upper, mylis)),如果您使用 want list。【参考方案2】:

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

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

【讨论】:

我个人更喜欢这个。所以 Python。 循环遍历列表不会慢很多吗? 如果你想要列表作为输出,那么这绝对比任何东西都好 从函数式方法获取列表返回list(map(str.upper, mylist)) 类似的东西会很方便: mylist = mylist.apply(lambda x: x.upper()) ; F#-ish 方法,非常紧凑且易于阅读;据我所知,现在没有这样的结构,但将来可能是 Pythons?【参考方案3】:

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

>>> 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 中被转换。返回的列表用 填充None 值应该被忽略,因为我们的目的是在原地转换列表 a

【讨论】:

一个建议:不要创建一个充满Nones 的列表,只是为了立即将其丢弃,使用any 而不是list 周围的map。此外,仅使用一个参数使用range,范围将从 0 开始,与列表索引相同。最终结果:any(map(lambda i:func(a, i), range(len(a))))。此表达式将返回 False ,但可以忽略。

以上是关于将函数应用于列表的每个元素的主要内容,如果未能解决你的问题,请参考以下文章

通过LINQ将函数应用于集合的所有元素[重复]

Rust 是不是有办法将函数/方法应用于数组或向量中的每个元素?

将函数应用于数组向量的元素

函数适用于列表的一个元素,不适用于完整列表,R

将函数应用于 DataFrame 中的每个单元格

r 函数将字符串中每个单词的首字母大写,除了“和”。用“和”代替“&”。可以应用于列表/向量