- 分析可能原因:
- 当
lst
为空列表时,执行 len(lst)
会得到 0,此时 total / len(lst)
就会引发 ZeroDivisionError
错误。
解决方案:
在计算平均值之前,添加对列表是否为空的检查。修改后的代码如下:
import time
def calculate_average(lst):
if not lst:
return None
total = 0
for num in lst:
total += num
return total / len(lst)
start_time = time.time()
large_list = list(range(1, 1000001))
average = calculate_average(large_list)
if average is not None:
end_time = time.time()
print(f"Average: {average}, Time taken: {end_time - start_time} seconds")
else:
print("The list is empty.")
- 性能优化方案:
- 使用
sum
函数:Python 内置的 sum
函数是用 C 实现的,比显式的 for
循环在性能上更优。
- 减少除法运算的次数:可以避免每次循环都计算
len(lst)
。优化后的代码如下:
import time
def calculate_average(lst):
if not lst:
return None
length = len(lst)
total = sum(lst)
return total / length
start_time = time.time()
large_list = list(range(1, 1000001))
average = calculate_average(large_list)
if average is not None:
end_time = time.time()
print(f"Average: {average}, Time taken: {end_time - start_time} seconds")
else:
print("The list is empty.")