在以下情况下,使用列表而不是生成器:
1)您需要访问数据 的多个 时间(即高速缓存的结果,而不是重新计算它们的):
for i in outer:# used once, okay to be a generator or return a list for j in inner: # used multiple times, reusing a list is better ...
2)您需要 随机访问 (或除正向顺序之外的任何访问):
for i in reversed(data): ... # generators aren't reversibles[i], s[j] = s[j], s[i] # generators aren't indexable
3)您需要 连接 字符串(这需要对数据进行两次传递):
s = ''.join(data) # lists are faster than generators in this use case
4)您使用的 PyPy 有时无法像正常函数调用和列表操作那样优化生成器代码。



