Bootstrap

Python排序,你用对了吗?一文教你sorted和sort的正确姿势!

目录

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 = name
        self.score = score

students = [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()方法同样接受keyreverse参数,允许更复杂的排序逻辑。然而,由于它修改的是原列表 ,所以在处理大量数据或需要保持原始数据不变的情况下,需要谨慎使用。此外,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
;