面试题答案
一键面试import math
def calculate_stats(lst):
if not lst:
return None, None, None
total = sum(lst)
mean = total / len(lst)
sorted_lst = sorted(lst)
mid = len(sorted_lst) // 2
median = sorted_lst[mid] if len(sorted_lst) % 2 != 0 else (sorted_lst[mid - 1] + sorted_lst[mid]) / 2
variance = sum((x - mean) ** 2 for x in lst) / len(lst)
std_dev = math.sqrt(variance)
return mean, median, std_dev
你可以这样调用这个函数:
lst = [1, 2, 3, 4, 5]
mean, median, std_dev = calculate_stats(lst)
print(f"平均值: {mean}")
print(f"中位数: {median}")
print(f"标准差: {std_dev}")
上述代码定义了一个calculate_stats
函数,该函数接受一个列表作为参数,返回该列表的平均值、中位数和标准差。如果列表为空,则返回None, None, None
。在函数内部,先计算平均值,然后对列表进行排序以计算中位数,最后计算标准差。
- 平均值计算:
- 使用
sum
函数计算列表元素总和,再除以列表长度得到平均值。
- 使用
- 中位数计算:
- 对列表进行排序。
- 根据列表长度的奇偶性来计算中位数。如果长度为奇数,直接返回中间元素;如果长度为偶数,返回中间两个元素的平均值。
- 标准差计算:
- 首先计算方差,方差是每个元素与平均值差的平方的平均值。
- 使用
math.sqrt
计算方差的平方根得到标准差。