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

python map,list(map),lambda和性能

全誉
2023-03-14
问题内容

我已经有过一段时间的程序程序员了,只是试图将我的思维方式转换为使用函数式编程(目前在Python 3中)。因此,而不是写一个for-
each循环,我试图把握之间的互动maplist(map(..))

可以说我有一个简单的for-in循环,它会进行一些资源密集的计算(print为简单起见,在这里将其替换):

arr = [1,2,3,4]    
for x in arr:
    print(x)

现在,当我尝试执行以下操作时

map(lambda x: print(x), arr)

没什么,UNTIL,我将其包装在列表中,它完成了我的超重print功能:

list(map(lambda x: print(x), arr))

为什么?我想念什么?我知道map返回一个迭代器,该迭代器应该节省内存,而不是立即保存整个列表。但是我的超重型print功能什么时候会被触发呢?


问题答案:

为什么?我想念什么?我知道map返回一个迭代器,该迭代器应该节省内存,而不是立即保存整个列表。但是我的超重型print功能什么时候会被触发呢?

map函数在程序员术语中通常称为 lazy 。它不会做任何工作,除非它 。这在函数式编程中被广泛称为“
惰性评估”
。该map函数不是立即计算任何值,而是返回所谓的
迭代器 。通过这样做,它委派了计算 返回给您 的值的工作。

迭代器可以使用next以下方式计算单个值:

>>> arr = [1, 2, 3]
>>> it = map(lambda x: print(x), arr)
>>> next(it)
1
>>>

但是,当您将地图迭代器转换为列表时,您将强制地图计算 其所有值 ,从而调用函数:

>>> it = map(lambda x: print(x), arr)
>>> list(it)
1
2
3
4
[None, None, None, None]
>>>


 类似资料:
  • Groovy 为预定义的 List 和 Map 集合提供了一些操作捷径,这两个字面值都比较简单易懂,但是 Map 会有一些不同. 例如,当您使用 “apply” 方法使用插件时,apply 会自动加上 Map 的一个参数,当您这样写 “ apply plugin: ‘java’ “时,实际上使用的是 name 参数(name-value),只不过在 Groovy 中 使用 Map 没有 < > ,

  • 本文向大家介绍判断List和Map是否相等并合并List中相同的Map,包括了判断List和Map是否相等并合并List中相同的Map的使用技巧和注意事项,需要的朋友参考一下 List、Set、Map判断两个对象相等的标准 List:通过equals()方法比较返回true即可。 HashSet:先比较两个对象hashCode()方法返回的值是否相等,如果不相等就认为两个对象是不相等的,如果两个对

  • 本文向大家介绍Java8中forEach语句循环一个List和Map,包括了Java8中forEach语句循环一个List和Map的使用技巧和注意事项,需要的朋友参考一下 在这篇文章中,我将向您展示如何用新的Java 8 forEach语句循环一个List和Map。 1、forEach 和 Map 1.1、常规循环Map常用的方法。 1.2 、在Java 8中, 你可以用forEach + lam

  • 问题内容: 我想拥有一个在Java中同时实现Map和List接口的对象。这个想法与以下问题类似:Java OrderedMap 我想将名称/值对添加到列表中,并让列表保留序列,但还可以按名称进行查找: 这是问题所在:创建此类时: 我收到一个编译错误: 如果我没有实现Map和List接口,那么有很多Java集合方法无法在此数据结构上使用。 (此外,上面的Java Ordered Map中提出的解决方

  • 考虑到类有三个字段name(String)、age(int)、salary(double)。 我想创建一个名为键,值为工资的映射(而不是对象本身),如果键不唯一,则使用linkedList保存所有重复键的值。 如何实现这种场景?

  • 全部显示 返回或设置命令栏的组合框控件中某项的值。String 类型,可读写。 注意对于内置的组合框控件,该属性为只读。 expression.List(Index) expression 必需。该表达式返回一个CommandBarComboBox 对象。 IndexLong 类型,必需。要设置的项。 示例 本示例可实现的功能为:查看标题为“Stock Data”的组合框控件(该控件位于命令栏“C

  • 问题内容: 我考虑了以下有关计算机体系结构的问题。假设我在Python中做 这需要log n,再加上,如果我理解正确,内存复制操作x[index:]。现在我最近读到,瓶颈通常是处理器与内存之间的通信,因此可以通过RAM快速完成内存复制。它是如何工作的? 问题答案: Python是一种语言。存在多种实现,并且它们可能具有列表的不同实现。因此,如果不查看实际实现的代码,就无法确定列表的实现方式以及它们

  • 本文向大家介绍详解Java8新特性Stream之list转map及问题解决,包括了详解Java8新特性Stream之list转map及问题解决的使用技巧和注意事项,需要的朋友参考一下 List集合转Map,用到的是Stream中Collectors的toMap方法:Collectors.toMap 具体用法实例如下: 输出结果为: 注意:用Collectors的toMap方法转换List,一般会遇