我已经看过它(artima.com和python-course.eu),而且Guido想要从Python中移除lambda,这表明使用列表理解可以实现相同的结果。当有人学习Python并努力掌握lambdas和列表理解时,我(到目前为止)赞成后者。
上面详述的python-course页面继续演示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各自返回
[102.56, 97.7, 99.14, 100.4, 100.03999999999999]
在这些情况下,我同意可以使用列表理解而不是lambda,我更好地理解它们!
现在在使用DataFrame.apply()函数时,我一直在试图使用列表推导来提出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,过滤,映射和减少,即列表理解”假?
答案 0 :(得分:2)
怎么样?
G['year'] = ["'{:02d}".format(x % 100) for x in G.year]
答案 1 :(得分:1)
你误解了,论证并不是lambda
可以被列表理解取代,而是map
和filter
的组合 -
通常涉及lambda
- 与列表推导有直接对等关系。 E.G。
list(map(int, list_of_str)) == [int(s) for s in list_of_str]
或者更清洁地使用过滤和映射:
list(map(lambda x:x**2, filter(lambda x: x%2==0, mylist)))
相当于
[x**2 for x in mylist if x%2==0]
lambda
创建函数对象,list-comprehensions创建列表对象。 lambda
可以用完整的函数定义替换:
def format_mod(x):
return "'{:02d}".format(x % 100)
G['year'].apply(format_mod)
lambda
的唯一优势在于它是匿名,即它不必分配给名称。