【问题标题】:Is it more efficient to use list comprehension or nested loops? [duplicate]使用列表推导或嵌套循环更有效吗? [复制]
【发布时间】:2019-08-03 08:57:09
【问题描述】:

如果你拿代码:

import os
directory = [files for root, dirs, files in os.walk(".")]
imgs = [file[0] for file in [[directory[x][y] for y,file in enumerate(dirs) if file.split('.')[1] == "png"] for x,dirs in enumerate(directory)] if len(file) != 0]

这是四个 for 循环查找目录中的所有 .png 文件并根据结果创建列表。我的问题是:严格按照代码的效率,这会比以下效率更高还是更低:

import os
imgs = []
directory = []

for root,dirs,file in os.walk("."):
    directory.append(file)

for x,dirs in enumerate(directory):
    for y,file in enumerate(dirs):
        if file.split('.')[1] == "png":
            imgs.append(file)

对不起,如果答案很明显,我以前从未真正考虑过程序的效率。任何解释将不胜感激:)

【问题讨论】:

标签: python python-3.x list for-loop


【解决方案1】:

与任何有关效率的问题一样,唯一真正的答案是分析您的代码,因为它总是取决于。

也就是说,for 循环和列表推导之间应该没有明显的区别(它们很可能编译为相同的字节码),您应该使用最易读的内容。在这种情况下,我会说嵌套的 for 循环比嵌套推导更具可读性。

【讨论】:

  • 不幸的是,这个答案不正确。列表推导式是完全建立起来的,每次被引用时(与生成器不同)。 For 循环显然有一个状态,因为它们包含每个嵌套变量的值。如果您的理解很大并且是嵌套的,那么使用相应的 for 循环很可能会更有效。
猜你喜欢
  • 2016-03-26
  • 2011-02-20
  • 1970-01-01
  • 2018-01-06
  • 2016-11-10
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 2021-06-04
相关资源
最近更新 更多