【问题标题】:Python: performance of for loops over a list comprehensionPython:for循环在列表理解上的性能
【发布时间】:2014-11-13 08:21:03
【问题描述】:
在我通过 for 循环迭代列表推导的情况下:
是在执行 for 循环时缓存列表推导,还是在每次执行时重新生成列表?
换句话说,这两个例子的表现会不同吗?
for x in [list comprehension]
对比
list_comprehension = [list comprehension]
for x in list_comprehension
我可以使用迭代器,我相信它会使用生成器,但我只是对这里的 Python for 循环执行感到好奇。
【问题讨论】:
标签:
python
loops
for-loop
generator
list-comprehension
【解决方案1】:
当你这样做时
for x in [list comprehension]:
整个列表是在 for 循环开始之前构建的。除了变量赋值之外,它基本上等同于第二个示例。
【解决方案2】:
列表推导返回一个列表。您的两个示例之间的唯一区别是您将输出列表绑定到第二个中的变量。
generator 表达式返回一个迭代器,这意味着:
- 在您使用它之前不会被评估
- 如果您想多次使用它,则必须每次都生成它。
【解决方案3】:
使用此命令:list_comprehension = [list comprehension] 实际上,您创建了另一个指向该数组已保存的内存部分的指针!
所以for 循环在两个案例中是相同的!看这个演示:
>>> a=[1,2,4]
>>> b=a
>>> b
[1, 2, 4]
>>> a
[1, 2, 4]
>>> a.append(7)
>>> a
[1, 2, 4, 7]
>>> b
[1, 2, 4, 7]