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

如何对Python类实例列表按名称长度倒序排序?遇报错求解答

问题分析与解决方法

错误原因

你调用itemlist.sort(key=len, reverse=True)时,sort方法会把列表里的每个item实例直接传给len函数,而你的自定义item类没有实现让实例支持len()调用的方法,Python无法计算实例的长度,因此抛出TypeError: object of type 'item' has no len()。

核心问题是:你想按实例的name属性的长度排序,但直接传len会让Python去计算实例本身的长度,这和你的需求不符。

解决方法

方法1:用lambda表达式(新手友好,直观)

把key参数改成一个lambda函数,明确告诉Python要取每个实例的name属性,再计算它的长度:

itemlist.sort(key=lambda x: len(x.name), reverse=True)
  • lambda x:指代列表里的每个item实例
  • len(x.name):计算该实例name属性的字符串长度,sort会依据这个长度值排序
  • reverse=True:设置为从长到短的降序排序

方法2:结合operator模块(适合多属性排序场景)

如果后续需要频繁按类属性排序,可以用operator.attrgetter先获取属性,再计算长度:

from operator import attrgetter

itemlist.sort(key=lambda x: len(attrgetter('name')(x)), reverse=True)

这个方法和lambda逻辑一致,只是把属性获取的逻辑抽离出来,复杂场景下更易维护。

示例验证

假设你的item类定义如下,运行以下代码可验证排序效果:

class item:
    def __init__(self, name):
        self.name = name

# 创建测试实例列表
itemlist = [item("apple"), item("banana"), item("cherry"), item("date")]
# 执行排序
itemlist.sort(key=lambda x: len(x.name), reverse=True)
# 打印排序后的结果
for item_obj in itemlist:
    print(item_obj.name)

输出结果:

banana
cherry
apple
date

内容的提问来源于stack exchange,提问作者Audrey Sims-Hunt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 10:25:07