列出理解而不是lambda数据帧应用()?

2024-03-29 10:39:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我看到它说(artima.compython-course.eu)有一个比Guido更杰出的人希望从Python中删除lambda,这表明使用列表理解可以获得相同的结果。作为一个学习Python并努力掌握lambdas和list理解的人,我(到目前为止)倾向于后者。
上面详述的python课程页继续演示lambda函数的使用,事实上,我可以重写使用list comprehension提供的示例。 E、 g

C = [39.2, 36.5, 37.3, 38, 37.8]
F1 = list(map(lambda x: (x *1.8) + 32, TC))
F2 = [(x *1.8) + 32 for x in TC]

其中F1和F2各返回一次

^{pr2}$

在这些情况下,我同意可以使用list comprehension来代替lambda,而且我理解它们更好地引导!在

现在正在与数据帧应用()函数我在尝试用列表理解来替代lambda时遇到了困难。接受

G = pd.DataFrame({'year':[1992, 1996, 1999], 'winner':['Pakistan',\
        'Sri Lanka','Australia']}, columns = ['year','winner'])

这给了

   year     winner
0  1992   Pakistan
1  1996  Sri Lanka
2  1999  Australia

如果我想操作序列数据,在本例中,要重新格式化年份,lambda函数可以工作:

G['year'] = G['year'].apply(lambda x: "'{:02d}".format(x % 100))

回来了

  year     winner
0  '92   Pakistan
1  '96  Sri Lanka
2  '99  Australia

我想不出用列表理解来做这个的方法。 出于学术好奇,有没有办法?
或者“除了lambda、filter、map和reduce还有一个同样强大的替代方法,即列表理解”的断言是错误的吗?在


Tags: lambda函数map列表yearlistf2f1
2条回答

怎么办

G['year'] = ["'{:02d}".format(x % 100) for x in G.year]

是吗?在

你误解了,这个论点并不是说lambda可以被列表理解所取代,而是map和{}的组合- 通常涉及lambda-与列表理解有直接的等价关系。E、 G

list(map(int, list_of_str)) == [int(s) for s in list_of_str]

或者更清晰地使用过滤和映射:

^{pr2}$

相当于

[x**2 for x in mylist if x%2==0]

lambda创建函数对象,列表理解创建列表对象。一个lambda可以替换为一个完整的函数定义:

def format_mod(x): 
    return "'{:02d}".format(x % 100)

G['year'].apply(format_mod)

lambda来说,唯一的优势是它是匿名的,也就是说,它不必指定给一个名字。在

相关问题 更多 >