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

如果不分配列表理解,效率如何?

阎俊英
2023-03-14
问题内容

在这个问题上,我与一个评论员争论,

for t in threads:
    t.join()

会比

[t.join() for t in threads]

撇开“滥用理解力”的问题不谈-
我倾向于同意,但我想为此一口答:我的版本(第二个)的效率(效率)到底如何?在我的情况下,Python会始终实现列表推导吗?还是在内部使用生成器?

map(lambda t: t.join(), threads)更有效率吗?还是有另一种方法将该功能应用于列表中的每个元素threads


问题答案:

列表推导将 始终
产生一个列表对象,在这种情况下,它将包含所有t.join()调用的返回值。因此,Python为您生成带有None长度值的列表len(threads)。Python绝不会尝试优化列表对象的创建。

使用时,使用的map()效率也没有提高,因为您需要添加额外的堆栈推送lambda。只要坚持明确的for循环。

确实,对于一系列线程连接,在这里尝试微优化是 没有意义的 。对于非关键代码段,您的可读性受到了损害。

换句话说,我完全同意评论者的意见。不要使用列表推导或map()仅用于副作用,而不必自己敲打ENTER并创建两行代码。

引用Python Zen:

  • 可读性很重要。



 类似资料:
  • 我一直在学习Haskell,我做了一些统计函数,这些函数可以用于或类型的列表 以下是两个示例: 然而,我现在想知道我是否可以通过以不同的方式编写来改进运行时。像这样: 或者像这样: 我不知道哈斯克尔在屏幕后面是怎么处理的。在原始版本中,计算机是否为中的每个条目计算?我想Haskell不会在背景中优化理解。我错了吗?

  • 问题内容: 我正在努力提高程序的性能。在改善和算法的复杂性之后,我正在尝试改善实现。我想知道在条件下如何使用该语句是否真的很重要。 编译器是否将这两个版本相同?它们的成本是否相同(如果我在语句中包含更多变量)? 要么 ( 在这个特定的项目中,我不太在意可读性,我知道第二个可读性较差 ) 问题答案: 的操作者(以及)是 短路 在Java中操作。 这意味着,如果是,Java的不评估,,等,因为它已经知

  • 问题内容: 我像这样在Redis中存储列表: 然后我像这样返回列表: 我得到这样的东西: 如何将其转换为实际的Python列表? 另外,我看不到其中定义的任何内容有帮助吗?我想念什么吗? 可能的解决方案(我认为很糟糕)可以是: 更新 好的,所以我找到了解决方案。 实际上,该函数希望所有列表项都作为参数传递,而不是作为单个列表传递。来自redis-py来源的功能签名使其清晰可见… 我在上面做的是发送

  • 问题内容: 定义 分解:将每个唯一对象映射为唯一整数。通常,映射到的整数范围是从零到n-1,其中n是唯一对象的数量。同样有两种变体。类型1是按标识唯一对象的顺序进行编号的位置。在类型2中,首先对唯一对象进行排序,然后应用与类型1中相同的过程。 安装程序 考虑元组列表tups 我想将其分解为 我知道有很多方法可以做到这一点。但是,我想尽可能有效地做到这一点。 我尝试过的 pandas.factori

  • 问题内容: 有关内置python列表对象的快速问题。假设您有一个数字为0-99的列表。您正在编写一个将列表中的最后一项用于其他目的的程序。使用list [-1]比使用list [99]更有效吗?换句话说,无论哪种情况,python都会遍历整个列表吗? 谢谢你的帮助。 问题答案: Python不会遍历列表来查找特定索引。列表是连续内存中的数组(指向元素的指针),因此查找所需元素始终是简单的乘法和加法

  • 我正在使用来衡量我的测试的代码覆盖率。我已经启用了分支机构覆盖,但我不能完全理解该报告。 没有分支保险,我得到100%的保险: 启用分支覆盖: 有问题的来源可以在这里找到。 <代码>21- 然而,<代码>53-