面试题答案
一键面试优化思路
- 避免创建新列表:常规的反向切片
lst[::-1]
会创建一个新的列表,在内存有限的情况下,这会占用额外的大量内存。所以我们应避免这种方式。 - 使用生成器:生成器是按需生成数据,而不是一次性生成所有数据放入内存,这样可以大大减少内存占用。
- 迭代器协议:利用Python的迭代器协议,从列表尾部开始逐个返回元素。
代码实现
def reverse_print(lst):
for i in range(len(lst) - 1, -1, -1):
yield lst[i]
big_list = list(range(1000000))
for num in reverse_print(big_list):
print(num)
上述代码中,reverse_print
函数是一个生成器函数,它使用 yield
关键字逐个生成列表反向的元素,而不是一次性生成整个反向列表。然后通过循环迭代这个生成器,在需要的时候才获取下一个元素,从而减少内存占用。