
本文讲解如何修改 Python 函数的返回语句,将原本返回元组(如 (['Tina'], 10.19))调整为符合要求的列表格式(如 ['Tina', 10.19]),同时兼顾代码健壮性与可读性。
本文讲解如何修改 python 函数的返回语句,将原本返回元组(如 `(['tina'], 10.19)`)调整为符合要求的列表格式(如 `['tina', 10.19]`),同时兼顾代码健壮性与可读性。
在原始实现中,the_fastest() 函数返回的是一个元组:(fastest_person, round(quickest_time, 2)),其中 fastest_person 被初始化为列表([]),导致即使仅一人最快,结果也是 (['Tina'], 10.19) —— 这与目标格式 ['Tina', 10.19] 不符。
要优雅地达成目标,关键在于两点:
- 语义修正:若函数逻辑默认只返回“最快的一人”(单人场景),则 fastest_person 应为字符串而非列表;
- 结构重构:直接构造并返回列表 [person_name, rounded_avg],而非元组。
以下是优化后的完整实现:
def the_fastest(times):
fastest_person = None
quickest_time = float('inf')
for person_data in times:
person_name = person_data[0]
person_times = person_data[1:]
if not person_times: # 防御性检查:避免空成绩列表导致 ZeroDivisionError
continue
avg_time = sum(person_times) / len(person_times)
if avg_time < quickest_time:
quickest_time = avg_time
fastest_person = person_name
# 注意:此处暂不处理多人同速情况;如需支持,请改用列表并统一追加逻辑
if fastest_person is None:
return ["N/A", 0.0] # 边界兜底:无有效数据时返回默认值
return [fastest_person, round(quickest_time, 2)]
# 测试数据
times = [
['Jason', 11, 11, 11.2, 10.9],
['Wally', 11, 11.5],
['Sheri', 12, 25],
['Jimmy', 10.1, 10.8, 12.1],
['Tina', 10.15, 10.223, 10.185, 10.22],
['Carmen', 12.15, 12.2, 12.18, 12.33]
]
print(the_fastest(times)) # 输出:['Tina', 10.19]✅ 关键改进说明:
- 移除冗余的 fastest_person = [] 初始化,改用 None 更准确表达“尚未找到最快者”;
- 删除对 fastest_person.append(...) 的调用(因单人逻辑下该操作会报错:NoneType has no attribute 'append'),保持逻辑一致性;
- 返回语句直写 return [fastest_person, round(...)],天然生成目标列表格式;
- 新增空成绩防御检查(if not person_times)和 None 兜底处理,提升鲁棒性。
⚠️ 注意事项:
- 若业务需求明确需支持多人并列最快(例如 ['Tina', 'Jimmy']),则应恢复 fastest_person 为列表,并在 == 分支中 append,最终返回 [fastest_person, ...] —— 此时结果为嵌套列表(如 [['Tina', 'Jimmy'], 10.19]),需额外判断结构或约定接口规范;
- round(..., 2) 仅控制显示精度,不影响内部计算;如需金融级精确四舍五入,建议使用 decimal.Decimal;
- 函数命名 the_fastest 暗示唯一结果,若扩展为多结果,建议同步更新函数名(如 get_fastest_candidates)以增强可维护性。
通过以上调整,代码既满足格式要求,又更贴近实际工程中的清晰性与健壮性标准。

















