[x for x in range(10000000)] (瞬间生成千万级列表)list(map(...))、tuple(zip(...))、set(filter(...)) (把迭代器强行榨干,变成实体集合)sum()、max()、min() (比如你要找最大值,必须把所有元素都看一遍才能告诉你谁是最大的)my_list[1:1000] (必须立刻在内存里切出一块新数据给你)非惰性就一定是坏事吗?
map(惰性)还要快。因为 map 每次都要经历“调用函数 -> 生成对象 -> 返回”的复杂流程,而列表推导式在 Python 底层是用 C 语言高度优化过的,一口气算完反而更快。my_iter[5] 直接拿第5个元素。但非惰性生成的列表,你可以随便通过索引访问,可以反复遍历,甚至可以排序(.sort())、反转(.reverse())。