当前位置: 首页 > 面试题库 >

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

龚征
2023-03-14
问题内容

我是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]


 类似资料:
  • 我确实做到了这一点,但我得到了以下错误 我尝试了不同的方法,但似乎没有一个奏效

  • 问题内容: 如何在有效的Postgres SQL查询中编写以下内容: 问题答案: 如果您希望在一条语句中全部使用,则可以使用CTE: 笔记: 您应在列列表中添加。 您应该指定列名 明确 的。这很重要,因为两个表中的列可能不匹配。 我总是在CTE中与/ /一起使用。这是正常的用例-例如,您可以从插入中获取序列ID。

  • 本文向大家介绍我们可以在JSP中使用XPath表达式的switch语句吗?,包括了我们可以在JSP中使用XPath表达式的switch语句吗?的使用技巧和注意事项,需要的朋友参考一下 在<X:选择>标签的运作方式类似于Java的switch语句。有了这个,您可以在多种选择之间进行选择。如果switch语句具有case语句,则<x:choose>标记具有<x:when>标记。以类似的方式,switc

  • 问题内容: 有没有一种方法可以在一个查询中包含多个语句(hibernate)? 这对我有用: 我在中得到了预期的结果。 但是我想要的是与它的构造器有一个新的实例。 例如这样: 或在 我也有兴趣使用DTO对象和DTO对象,但我无法读懂吗?那正确吗? 使用两个示例时,我的Spring Boot应用程序确实从错误开始。 最后我要一张地图 问题答案: 从技术上讲,根据JPQL select子句的定义,它将

  • 问题内容: 我正在尝试创建一个switch语句,但似乎无法使用被求值的表达式(而不是设置的字符串/整数)。我可以轻松地使用if语句来执行此操作,但希望大小写应该更快。 我正在尝试以下 我缺少明显的东西吗?Google在这种情况下并不友好。 任何帮助/指针表示赞赏 问题答案: 你总是可以做 它之所以有效是因为它是一个常量,因此将执行第一个case语句下带有计算结果为true的表达式的代码。 我猜这有

  • 尤达表达式 不要使用尤达表达式。尤达表达式是指,拿一个常量去和变量比较而不是拿变量去和常量比较。它就像是在表达 “蓝色是不是天空的颜色” 或者 “高个是不是这个男人的属性” 而不是 “天空是不是蓝的” 或者 “这个男人是不是高个子的” (译者注:名字起源于星球大战中尤达大师的讲话方式,总是用倒装的语序) 推荐: if ([myValue isEqual:@42]) { ... 不推荐: if ([

  • 本文向大家介绍表达式和语句有什么区别?如何把语句转换为表达式?相关面试题,主要包含被问及表达式和语句有什么区别?如何把语句转换为表达式?时的应答技巧和注意事项,需要的朋友参考一下 简单的说来,表达式(Expression)是语句(Statement)的子集,表达式一定会返回一个值,而语句不会。 比如定义变量、返回语句都属于语句,而逻辑判断、方法调用、赋值都属于表达式。 支持语句的地方都支持表达式,

  • 我们在前面的小节中,已经学习了变量和运算符。有了这些前置知识,我们就可以学习表达式、语句和块了。 运算符可用于构建表达式,表达式可以进行值的计算,它是语句的核心组成部分;而语句是指令式编程语言中最小的独立元素;多条语句又可以组成语句块。本小节我们将学习表达式的概念和常用分类,也将了解到什么是语句和块。 1. 表达式 1.1 概念 表达式,是由数字、运算符、数字分组符号(括号)、自由变量和约束变量等