目录
1、sorted基础用法 🍏
1.1 列表排序入门
1.2 自定义排序规则
1.3 排序稳定性和key函数
2、sort内置方法操作 🔍
2.1 直接修改原列表
2.2 sort高级技巧与性能考量
2.3 案例:数据预处理实战
2.4 高级用法:reverse与cmp_to_key
3、应对复杂数据结构 🌐
3.1 字典排序依据键或值
3.2 元组列表排序实战
3.3 numpy数组与pandas DataFrame排序
4、高级排序技巧 💡
4.1 多关键字排序
4.2 反向排序与自定义排序类
4.3 利用itemgetter和attrgetter优化性能
5、性能对比与选择策略 ⏱️
5.1 sorted vs sort速度测试
5.2 内存消耗考量
5.3 场景驱动的决策建议
6、总结与展望 🌟
1、sorted基础用法 🍏
1.1 列表排序入门
在Python中,sorted()
函数是一种强大而灵活的工具,用于对可迭代对象进行排序,如列表、元组等。它不修改原对象,而是返回一个新的排序后的列表。基础用法相当直接,例如对一个简单的整数列表进行升序排序:
numbers = [5, 9, 1, 4, 3]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # 输出: [1, 3, 4, 5, 9]
1.2 自定义排序规则
sorted()
函数通过key
参数允许用户自定义排序规则。这在处理复杂数据结构时尤为有用,比如字典或包含对象的列表。下面例子展示了按字符串长度排序:
words = ["apple", "fig", "banana", "date"]
sorted_words = sorted(words, key=len)
print(sorted_words) # 输出: ['fig', 'date', 'apple', 'banana']
1.3 排序稳定性和key函数
排序稳定性是指相等元素的原始顺序是否被保留。Python 3.5及以后版本的sorted()
默认是稳定的,意味着当比较键相同时 ,原始顺序不会改变。利用key
函数可以深入对象属性进行排序,例如在学生对象列表中按成绩排序:
class Student:def __init__(self, name, score):self.name = nameself.score = scorestudents = [Student('Alice', 88), Student('Bob', 95), Student('Charlie', 90)]
sorted_students = sorted(students, key=lambda s: s.score)
for student in sorted_students:print(student.name, student.score)
# 输出: Alice 88, Charlie 90, Bob 95
通过这些示例,我们探索了sorted()
函数的基础用法、自定义排序逻辑以及其稳定性特点 ,为处理不同场景下的排序需求提供了坚实的基础。
2、sort内置方法操作 🔍
2.1 直接修改原列表
列表的sort()
方法与sorted()
函数不同,它直接在原地对列表进行排序,而不创建新的列表。这意味着sort()
方法会修改原始列表,但不返回任何值,因此你可能会看到类似None
的返回结果。下面是一个基础示例:
numbers = [5, 2, 9, 1, 5, 6]
numbers.sort()
print(numbers) # 输出: [1, 2, 5, 5, 6, 9]
2.2 sort高级技巧与性能考量
sort()
方法同样接受key
和reverse
参数,允许更复杂的排序逻辑。然而,由于它修改的是原列表 ,所以在处理大量数据或需要保持原始数据不变的情况下,需要谨慎使用。此外,sort()
方法的内部实现通常比sorted()
更高效,因为它避免了创建新列表的开销。下面展示了一个使用key
参数的例子:
words = ["banana", "apple", "cherry", "date"]
words.sort(key=str.lower)
print(words) # 输出: ['apple', 'banana', 'cherry', 'date']
2.3 案例:数据预处理实战
在实际的数据预处理中,sort()
方法经常用来整理数据 ,使其按特定顺序排列。例如,在处理调查问卷的结果时,可能需要按参与者的年龄或性别排序数据,以便后续分析。下面是一个模拟的情境,展示如何使用sort()
方法对包含调查对象年龄的列表进行排序:
ages = [22, 34, 26, 29, 31, 23, 30]
ages.sort()
print(ages) # 输出: [22, 2