【问题标题】:should we always replace for loops with list comprehension我们是否应该总是用列表理解替换 for 循环
【发布时间】:2019-01-04 12:00:26
【问题描述】:

我的问题就像标题一样。

  1. 我们是否应该总是尝试用 list/dict 理解替换 for 循环,因为后者执行得更快?

我正在编写这个项目,该项目需要多次迭代一些庞大的元组列表,而且需要很长时间。所以我现在正在努力优化我的代码。我需要遍历元组列表的主要原因是,假设我有一个值,我想知道它是否在列表中,以及同一个元组中的另一个值是什么。

  1. 将这些列表转换为数组或字典会有帮助吗?

任何意见将不胜感激。提前致谢。

【问题讨论】:

  • 您研究过生成器吗?听起来在您的场景中确实不需要在迭代之前创建列表。
  • 请向我们展示您的代码!
  • 这有点宽泛。最好显示一个您循环的元组列表的最小示例以及您想要的结果和当前的实现。然后可以考虑如何优化它。
  • 如果你的代码现在需要很长时间,列表理解仍然需要很长时间——可能或多或少,但它仍然是 O(forever)。改为更改您的算法或数据结构。
  • 如果您实际上是在尝试构建一个列表,列表理解可能会改进您的代码。否则,列表推导式不会替代 for 循环。

标签: python for-loop generator list-comprehension


【解决方案1】:

使用字典而不是元组列表会更有效 - 通常,从字典中获取给定键的值是 O(1)(恒定速度,无论字典有多大) ,而通过整个列表搜索元组是 O(n) (这意味着效率会随着列表的增长而下降)。

列表推导而不是 for 循环应该不会有很大的不同,除了在列表推导中您实际上是在构建一个列表这一事实 - 因此,如果您正在经历的循环非常大,您可能会遇到内存问题.

听起来你应该在这种情况下有一个字典-顺便说一句-将元组列表转换为字典,只需这样做:

dict(list_of_tuples)

【讨论】:

    猜你喜欢
    • 2012-02-16
    • 1970-01-01
    • 2018-03-22
    • 2014-10-07
    • 2010-10-03
    • 1970-01-01
    • 2012-02-15
    • 2021-05-22
    • 1970-01-01
    相关资源
    最近更新 更多