【问题标题】:Python vs. R: apply a function to each element in a vectorPython vs. R:将函数应用于向量中的每个元素
【发布时间】:2017-05-01 10:41:34
【问题描述】:

我想对向量中的每个元素应用一个函数 (len)。在 R 中,我可以使用sapply(cities,char) 轻松做到这一点。在不写循环的情况下,在 Python 中有没有这样的替代方案?

【问题讨论】:

标签: python apply


【解决方案1】:

考虑一下:

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

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

【讨论】:

  • 这称为列表推导。我喜欢这个答案。
【解决方案2】:

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()

上面的代码生成了一个包含输入平方值的新列表:

[1, 4, 9, 16, 25]

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

【讨论】:

    【解决方案3】:

    语法是map(function, list)

    例子:

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

    输出:

    [ 3, 3 ]
    

    【讨论】:

      【解决方案4】:

      您可以使用接收函数的函数映射来应用到可迭代对象。地图地图文档:here

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

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

      【讨论】:

        猜你喜欢
        • 2012-12-21
        • 1970-01-01
        • 2013-08-28
        • 2022-11-02
        • 2013-10-13
        • 1970-01-01
        • 2022-07-13
        • 1970-01-01
        • 2022-01-21
        相关资源
        最近更新 更多