为何Python中avg函数作为sorted的key可调用,直接调用却报错?
为什么sorted用avg当key正常,直接调用avg(data)却报错?
核心原因是两种调用方式传入avg函数的参数完全不同:
- 当
avg作为sorted的key参数时,sorted会自动遍历你的data列表,把里面的每一个子列表单独传给avg。比如第一次传[5,5,5],第二次传[3,4,5],这些都是纯整数组成的列表,sum()能正常求和,len()也能正确获取长度,所以函数能正常运行并返回平均值。 - 但你直接调用
avg(data)时,传入的是整个大列表[[5,5,5], [3,4,5], [3,-3,0], ...]。这时候sum(data)会尝试把列表里的元素(也就是一个个子列表)相加,Python没法把整数和列表做加法运算,所以直接抛出了TypeError: unsupported operand type(s) for +: 'int' and 'list'。
如果想手动测试avg函数,你应该传入单个子列表,比如:
avg([5,5,5]) # 正常输出 [5, 5, 5] average is 5.0
内容的提问来源于stack exchange,提问作者Oliver Murfin
相关产品推荐
相关产品推荐

