Python vs. R:将函数应用于向量中的每个元素



我想在向量中的每个元素上应用一个函数(len)。在 R 中,我可以轻松地使用sapply(cities,char).在 Python 中是否有这样的替代方案而无需编写循环?

语法是map(function, list)

例:

map(len, [ [ 1,2,3], [4,5,6] ])

输出:

[ 3, 3 ]

Rsapply()可以用列表推导代替,但公平地说,列表推导并不能严格避免编写循环

除了map()之外,你还应该看看Pandas,它为人们在R中使用的几个功能提供了Python的替代品。

import pandas as pd
vector = [1,2,3,4,5]
square_vector = pd.Series(vector).apply(lambda x: x**2)  
print square_vector.tolist()

上面的代码会产生一个新列表,其中包含插补的平方值:

[1, 4, 9, 16, 25]

在这里,我将向量传递给系列构造函数pd.Series(vector)并应用匿名函数apply(lambda x: x**2)。输出是一个熊猫系列,如果需要,可以转换回列表tolist()。Pandas系列具有许多功能,是许多数据操作和分析任务的理想选择。

可以使用函数映射来接收要应用于可迭代对象的函数。地图地图文档:这里

例如,您可以通过以下方式传递一个匿名函数(使用 lambda)以应用于列表中的每个元素:

>>> map(lambda x: x[1]*2 + 3, [[1,2,3], [1,4]])
[7, 11]

考虑一下:

cities = ['new york', 'tokyo', 'paris']
sapply_equivalent = [len(city) for city in cities]

然后sapply_equivalent返回[8, 5, 5]

最新更新