从您的具体问题到更一般的问题,我可以在这里提供几种不同的答案。因此,从最具体到最一般:
能否在lambda中放入多个语句?
:不 但是您实际上不需要使用lambda。您可以将语句放在a中def
。即:
def second_lowest(l):
l.sort()
return l[1]
map(second_lowest, lst)
您可以通过对列表进行排序从lambda中获得第二低的商品吗?
是的。正如alex的答案所指出的那样,sorted()
是sort的一种版本,它创建了一个新列表,而不是就地排序,并且可以被链接。请注意,这可能是您应该使用的- 地图在原始列表上产生副作用是不好的做法。
如何从一系列列表中的每个列表中获取第二低的项目?
sorted(l)[1]
:实际上并不是最好的方法。它具有O(N log(N))复杂度,同时存在O(n)解决方案。可以在heapq模块中找到。
>>> import heapq
>>> l = [5,2,6,8,3,5]
>>> heapq.nsmallest(l, 2)
[2, 3]
因此,只需使用:
map(lambda x: heapq.nsmallest(x,2)[1], list_of_lists)
通常也认为使用列表理解更加清晰,这完全避免了lambda:
[heapq.nsmallest(x,2)[1] for x in list_of_lists]