我们是否应该总是用列表理解替换循环

时间:2018-07-27 11:03:22

标签: python for-loop generator list-comprehension

我的问题和标题一样。

  1. 由于列表/ dict的执行速度更快,我们应该总是尝试用列表/ dict的理解来代替它吗?

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

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

任何输入将不胜感激。提前致谢。

2 个答案:

答案 0 :(得分:5)

使用字典而不是元组列表会更加高效-通常,从字典中为给定键获取值是O(1)(恒定速度,字典的大小无关紧要) ,在遍历整个列表时,搜索元组为O(n)(这意味着效率随着列表的增长而降低)。

列表理解而不是for循环应该没什么大不同,除了在列表理解中您实际上是在构建列表这一事实之外,因此,如果经历的循环很大,则可能会遇到内存问题

在这种情况下,听起来您应该有一个字典-btw-将元组列表转换为字典,只需执行以下操作即可:

dict(list_of_tuples)

答案 1 :(得分:0)

正如@maor所建议的,您描述的类型是字典(O(1)查找),所以我只回答您的另一个问题:

列表(或任何)推导应该用于从现有可迭代对象创建一个可迭代对象,该映射具有相对简单的逻辑。这并不是要在每个地方替换循环,对于依赖循环的繁琐逻辑,您不应费劲地将其转变为理解力。

如果是您第一次看到它们,它们很酷,但请注意不要在不必要时落入过度使用的陷阱。