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

使用生成器表达式而不是列表进行sorted()

丁宏浚
2023-03-14
问题内容

在这里看到讨论之后:Python-产生时差,我很好奇。我最初还以为生成器比列表快,但是当涉及sorted()时我不知道。将生成器表达式发送到sorted()而不是列表有什么好处吗?生成器表达式最终是否仍要在sorted()内放入列表中?

编辑:我只能接受一个答案让我感到悲伤,因为我感到很多答复都有助于澄清这个问题。再次感谢大家。


问题答案:

首先要做的sorted()是将数据转换为列表。基本上,实现的第一行(在参数验证之后)是

newlist = PySequence_List(seq);

另请参见完整的源代码版本2.7和版本3.1.2。

编辑 :正如aaronasterling在答案中指出的那样,变量newlist是一个
列表。如果参数已经是列表,则将其复制。因此,生成器表达式确实具有使用较少内存的优势。

有很大的好处。由于sorted不会影响按顺序传递,因此必须对其进行复制。如果它是根据生成器表达式创建列表,则仅生成一个列表。如果传入了列表理解,则首先建立列表,然后对其sorted进行复制以进行排序

这反映在行中

newlist = PySequence_List(seq);

在Sven Marnach的回答中引用。本质上,这将无条件地复制传递给它的任何序列的副本。



 类似资料:
  • 本文向大家介绍python列表生成式与列表生成器的使用,包括了python列表生成式与列表生成器的使用的使用技巧和注意事项,需要的朋友参考一下 列表生成式:会将所有的结果全部计算出来,把结果存放到内存中,如果列表中数据比较多,就会占用过多的内存空间,可能会导致MemoryError内存错误或者导致程序在运行时出现卡顿的情况 列表生成器:会创建一个列表生成器对象,不会一次性的把所有结果都计算出来,如

  • 问题内容: 什么时候应该使用生成器表达式,什么时候应该在中使用列表推导? 问题答案: John的答案很好(当你要迭代多次时,列表理解会更好)。但是,还应注意,如果要使用任何列表方法,都应使用列表。例如,以下代码将不起作用: 基本上,如果你要做的只是迭代一次,则使用生成器表达式。如果你要存储和使用生成的结果,那么列表理解可能会更好。 由于性能是选择彼此的最常见原因,所以我的建议是不要担心它,而只选择

  • 本文向大家介绍python生成器表达式和列表解析,包括了python生成器表达式和列表解析的使用技巧和注意事项,需要的朋友参考一下 绝大多数情况下,遍历一个集合都是为了对元素应用某个动作或是进行筛选。如果看过本文的第二部分,你应该还记得有内建函数map和filter提供了这些功能,但Python仍然为这些操作提供了语言级的支持。 如你所见,生成器表达式和列表解析(注:这里的翻译有很多种,比如列表展

  • Quartz 的Cron任务调度表达式一般人很难理解,在Googole上查询也没有发现类似的代码,所以开发了一个对Quartz Cron 表达式的可视化双向解析和生成的一个java的GUI程序,供使用Quartz的程序员参考和使用,源代码放在SourceForge网站

  • 本文向大家介绍python 中的列表生成式、生成器表达式、模块导入,包括了python 中的列表生成式、生成器表达式、模块导入的使用技巧和注意事项,需要的朋友参考一下 5.16 列表生成式 5.17 列表生成式与生成器表达式的应用 第六章模块 什么是模块? 模块就是一系统功能的集合体,在python中,一个py文件就是一个模块,比如module.py,其中模块名module 6.1 import

  • 问题内容: 由于各种原因,我试图编写部分动态的HQL查询而不使用Criteria API。我想知道是否有一种简单的方法可以使用HQL表达式来短路where限制。例如,这是正常工作的原始查询: StatusCodes是字符串列表,而orgIds是整数列表。但是,任一个都是可选的,并且不应限制是否传递null而不是传递集合。我试图做到这一点是这样的: 不幸的是,这行不通,但是还有其他方法可以行得通吗,