python lambda表达式中可以有多个语句吗?

我是python新手,试图实现以下目标:

我有一个清单清单:

lst = [[567,345,234],[253,465,756, 2345],[333,777,111, 555]]

我想将lst映射到另一个列表,该列表仅包含每个子列表中第二小的数字。因此结果应为:

[345, 465, 333]

例如,如果我只是对最小的数字感兴趣,我可以这样做:

map(lambda x: min(x),lst)

我希望我可以这样做:

map(lambda x: sort(x)[1],lst)

但是排序不会连锁。(无返回)

不允许这样的事情:

map(lambda x: sort(x); x[1],lst) #hence the multiple statement question

有没有一种方法可以在python中使用map来执行此操作,而 无需定义命名函数 ?(例如,使用Ruby中的匿名块很容易)

回答:

从您的具体问题到更一般的问题,我可以在这里提供几种不同的答案。因此,从最具体到最一般:

能否在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]

以上是 python lambda表达式中可以有多个语句吗? 的全部内容, 来源链接: utcz.com/qa/428498.html

回到顶部