Lab 1.3 - Python 编程实验指导:2维List高级排序¶
实验目的¶
理解多列排序的原理和实现
能够将排序技术应用到实际问题中
了解使用
operator.itemgetter进行2维列表排序的方法
实验环境¶
Python 3.6+
无需额外安装库
实验原理¶
1. operator.itemgetter 详解¶
operator.itemgetter 是一个函数工厂,用于创建提取序列元素的函数:
import operator
# 创建获取索引1元素的函数
get_second = operator.itemgetter(1)
data = [10, 20, 30]
print(get_second(data)) # 输出: 20
# 在排序中的应用
students = [["Alice", 85], ["Bob", 92]]
sorted_students = sorted(students, key=operator.itemgetter(1))
优势:
比 lambda 函数性能更好
代码更简洁清晰
支持多级索引
2. 排序算法基础¶
[step 1]
Python的sorted()函数使用Timsort算法,是稳定的排序算法,能够保持相等元素的相对顺序。
实验内容¶
任务1:学生信息排序系统¶
示例数据¶
students = [
["张三", "2023001", 85, 92],
["李四", "2023005", 78, 88],
["王五", "2023002", 92, 85],
["赵六", "2023004", 65, 72],
["钱七", "2023003", 88, 90],
["孙八", "2023007", 76, 81],
["周九", "2023006", 95, 93],
["吴十", "2023008", 82, 79],
["郑十一", "2023009", 71, 68],
["王十二", "2023010", 89, 87]
]
实现要求¶
按姓名排序(升序)
按学号排序(升序)
按成绩1排序(降序)
按成绩2排序(降序)
参考代码¶
import operator
def sort_students(data, column_index, reverse=False):
"""对学生数据按指定列排序"""
return sorted(data, key=operator.itemgetter(column_index), reverse=reverse)
def display_students(students_list, title):
"""显示学生信息"""
print(f"\n{title}")
print("-" * 50)
print(f"{'姓名':<8} {'学号':<10} {'成绩1':<6} {'成绩2':<6}")
for student in students_list:
print(f"{student[0]:<8} {student[1]:<10} {student[2]:<6} {student[3]:<6}")
# 测试代码
display_students(sort_students(students, 0), "按姓名排序")
display_students(sort_students(students, 2, True), "按成绩1降序排序")
任务2:新闻信息排序系统¶
[step 2]
示例数据¶
from datetime import datetime
news = [
["人工智能改变未来", "2024-01-15", 15000, 320],
["气候变化全球会议", "2024-01-10", 8900, 150],
["新款智能手机发布", "2024-01-18", 25600, 480],
["股市大幅波动", "2024-01-12", 12000, 210],
["科技公司财报亮眼", "2024-01-16", 9800, 180],
["体育赛事精彩瞬间", "2024-01-14", 45000, 650],
["教育改革新政策", "2024-01-11", 7600, 95],
["医疗突破新发现", "2024-01-17", 11200, 280],
["旅游行业复苏", "2024-01-13", 6800, 120],
["环保技术创新", "2024-01-19", 5400, 75]
]
特别要求¶
按上一个任务仿写代码
日期排序需要特殊处理
点击量和转发次数按数值大小排序
任务3:通用表格排序器类(选做)¶
[step 3]
实现要求¶
创建一个 TableSorter 类,模拟图形界面中的表格排序功能:
支持点击不同列排序
点击同一列时切换升序/降序
显示排序状态指示器
参考代码框架¶
class TableSorter:
def __init__(self, data, headers):
self.data = data
self.headers = headers
self.sort_column = None
self.sort_order = True # True=升序, False=降序
def sort_by_column(self, column_index):
# 实现排序逻辑
pass
def display(self):
# 实现显示逻辑
pass