我想在向量中的每个元素上应用一个函数(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]