我想在向量中的每个元素上应用函数(len
)。在R中,我可以使用sapply(cities,char)
轻松完成此操作。在没有编写循环的情况下,Python中是否有这样的替代方法?
答案 0 :(得分:11)
语法为map(function, list)
。
示例:
map(len, [ [ 1,2,3], [4,5,6] ])
输出:
[ 3, 3 ]
答案 1 :(得分:5)
R sapply()
可以用列表理解替换,但是列表理解并不严格地避免循环的写 。
除了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()
上面的代码会生成一个新列表,其中包含imput的平方值:
[1, 4, 9, 16, 25]
在这里,我将向量传递给系列构造函数pd.Series(vector)
并应用匿名函数apply(lambda x: x**2)
。输出是一个pandas系列,如果需要,可以将其转换回列表tolist()
。 Pandas系列具有许多功能,是许多数据处理和分析任务的理想选择。
答案 2 :(得分:2)
您可以使用接收函数的函数映射来应用于iterable。地图地图的文档:here
例如,您可以通过匿名函数(使用lambda)通过这种方式将每个元素应用于列表:
>>> map(lambda x: x[1]*2 + 3, [[1,2,3], [1,4]])
[7, 11]
答案 3 :(得分:0)
考虑一下:
cities = ['new york', 'tokyo', 'paris']
sapply_equivalent = [len(city) for city in cities]
然后sapply_equivalent
返回[8, 5, 5]