You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python实现fastest_car函数及KeyError:1错误原因咨询

问题分析与解答

题目要求

练习模板包含Car类,通过make(str类型)和top_speed(int类型)两个属性表示汽车特征。请编写名为fastest_car(cars: list)的函数,接收Car对象列表作为参数,返回最快汽车的make属性。假设总有一辆车的最高速度唯一,请勿修改传入列表或Car类定义。

测试代码示例:

if __name__ == "__main__":
    car1 = Car("Saab", 195)
    car2 = Car("Lada", 110)
    car3 = Car("Ferrari", 280)
    car4 = Car("Trabant", 85)

    cars = [car1, car2, car3, car4]
    print(fastest_car(cars))

# 预期输出: Ferrari

你的尝试错误分析

方法1错误点

  1. 你把fastest_car定义成了Car类的实例方法,但题目要求它是一个独立的函数。实例方法第一个参数默认是self(代表当前实例),调用Car.fastest_car(cars[-1])时,cars[-1]被当作self参数,函数还缺一个list参数,因此抛出TypeError。
  2. 使用list.sort()会直接修改原列表,违反题目“请勿修改传入列表”的要求。

方法2错误点

你的cars是由多个单键字典组成的列表,每个字典的键是汽车品牌(比如'Saab'),值是速度。lambda x : x[1]试图取字典中键为1的值,但这些字典里根本不存在键1,所以触发KeyError。

如果要对这种字典列表排序,正确的取值方式应该是取每个字典的唯一值,比如lambda x: list(x.values())[0],但这种数据结构本身不符合题目要求的“接收Car对象列表”的参数形式。

正确实现

按照题目要求,编写独立的fastest_car函数,不修改原列表,找到速度最快的Car对象并返回其make属性:

class Car:
    def __init__(self, make: str, top_speed: int):
        self.make = make
        self.top_speed = top_speed

def fastest_car(cars: list):
    # 使用max函数,按top_speed属性找最大值,不修改原列表
    fastest_car_obj = max(cars, key=lambda car: car.top_speed)
    return fastest_car_obj.make

if __name__ == "__main__":
    car1 = Car("Saab", 195)
    car2 = Car("Lada", 110)
    car3 = Car("Ferrari", 280)
    car4 = Car("Trabant", 85)

    cars = [car1, car2, car3, car4]
    print(fastest_car(cars))  # 输出: Ferrari

补充说明

  • max()函数会遍历列表,根据key指定的规则找到最大值对应的元素,全程不会修改原列表,符合题目要求。
  • 题目明确总有一辆车的速度唯一,因此无需处理并列最快的情况。

内容的提问来源于stack exchange,提问作者stel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 20:15:37