2014-09-18 71 views
0

在我通过for循环遍历列表理解的情况下:
列表理解是在执行for循环时缓存的,还是列表重新生成每次执行?Python:for循环遍历列表理解的性能

换句话说,这两个例子的表现会不同吗?

for x in [list comprehension] 

VS

list_comprehension = [list comprehension] 
for x in list_comprehension 

我可以用一个迭代器,我相信使用一个发电机,但我只是好奇的Python for循环执行在这里。

回答

2

当你

for x in [list comprehension]: 

整个列表for循环开始前建成。除了变量赋值之外,它基本上等同于第二个示例。

1

列表理解返回列表。你的两个例子唯一的区别是你在第二个输出列表中绑定了一个变量。

一个发电机表达式返回一个迭代器,这意味着:

  • 它不会得到评估。如果你想使用它不止一次你将不得不使用之前将
  • 每次生成它。
0

使用此命令: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]