Python中Person对象列表排序后显示异常问题求助
自定义Person对象列表排序后打印显示内存地址的问题解决
你的排序逻辑完全正确,实际输出的<__main__.Person object at 0x...>只是Python默认的对象字符串表示,不代表排序失败——列表已经按age属性排好序了,只是你看不到直观的对象属性信息而已。
问题根源
Python中自定义类的实例,默认会继承object类的__repr__方法,该方法返回的是对象的内存地址信息,无法直观展示对象的属性值。
解决方法
方法1:给Person类添加__repr__方法(推荐)
__repr__方法用于定义对象的“官方”字符串表示,适合调试和打印,能让Python以你预期的格式输出对象:
class Person: def __init__(self, name, age): self.name = name self.age = age def __repr__(self): # !r 确保name以带引号的字符串形式输出,和预期格式一致 return f"Person({self.name!r}, {self.age})" people = [ Person("Alice", 30), Person("Bob", 25), Person("Charlie", 40), Person("David", 22) ] sorted_people = sorted(people, key=lambda person: person.age) print(sorted_people)
运行后会输出你预期的格式:
[Person('David', 22), Person('Bob', 25), Person('Alice', 30), Person('Charlie', 40)]
方法2:临时生成可读格式(无需修改类)
如果不想修改Person类,可以在打印时手动转换为可读字符串:
sorted_people = sorted(people, key=lambda person: person.age) # 用列表推导式生成包含属性的字符串列表 print([f"Person({p.name!r}, {p.age})" for p in sorted_people])
快速验证排序正确性
如果想快速确认排序是否生效,也可以直接打印每个对象的属性:
for p in sorted_people: print(p.name, p.age)
输出会清晰显示排序结果:
David 22 Bob 25 Alice 30 Charlie 40
内容的提问来源于stack exchange,提问作者Ketan Patel
相关产品推荐
相关产品推荐

