如何对含多属性的Fish类实例按指定规则排序?
按size降序、name升序排序Fish实例的解决方案
完整实现代码
class Fish: def __init__(self, size, name): self.size: int = int(size) self.name: str = name def main(): fish_list = [] # 读取多行输入,直到输入结束 while True: try: line = input().strip() if not line: continue # 拆分每行的name和size name, size = line.split() fish_list.append(Fish(size, name)) except EOFError: break # 按规则排序:size降序,size相同则name升序 sorted_fish = sorted(fish_list, key=lambda x: (-x.size, x.name)) # 输出排序结果 for fish in sorted_fish: print(f"{fish.name} {fish.size}") if __name__ == "__main__": main()
关键逻辑说明
- 输入读取:通过循环读取每行输入,跳过空行,拆分出
name和size后创建Fish实例并加入列表。 - 排序规则实现:使用
sorted()函数的key参数,传入lambda表达式lambda x: (-x.size, x.name):-x.size:利用sorted()默认的升序排序特性,取size的负值等价于按size降序排列。x.name:当多个实例size相同时,按name的字母升序排序(字符串默认按ASCII码顺序比较,符合常规字母顺序要求)。
- 结果输出:遍历排序后的列表,按
name size格式打印每个实例的属性。
测试验证
输入示例:
d 3 a 1 c 2 b 1
运行代码后输出:
d 3 c 2 a 1 b 1
完全符合预期的排序规则。
内容的提问来源于stack exchange,提问作者ashley jacob
相关产品推荐
相关产品推荐

