一、Python List排序的基础知识
Python的内置函数sorted()可以对列表进行排序。使用方法为:sorted(list)。其中,list是要排序的列表,sorted()函数将返回排序后的列表。这个函数返回的是一个新的列表,而不是对原有列表进行操作。
默认情况下,sorted()使用升序排列。如果要使用降序排列,则可以将参数reverse设置为True
对于对象列表而言,可以使用对象的某个属性进行排序。这里需要使用sorted()函数的key参数。
# 排序基础示例: num_list = [2, 5, 1, 9, 3] sorted_list = sorted(num_list) # 默认升序 print(sorted_list) # [1, 2, 3, 5, 9] reverse_list = sorted(num_list, reverse=True) # 降序排列 print(reverse_list) # [9, 5, 3, 2, 1] word_list = ['cat', 'elephant', 'dog', 'bat'] sorted_words = sorted(word_list) # 默认按字典序排列 print(sorted_words) # ['bat', 'cat', 'dog', 'elephant'] len_words = sorted(word_list, key=len) # 以字符串长度排序 print(len_words) # ['cat', 'dog', 'bat', 'elephant']
二、自定义排序规则
对于一些特殊需求,需要使用自定义的排序规则。例如,进行不区分大小写的排序,或是将某个单词排在列表的最前面。
为了实现这个功能,可以使用sort()函数并自定义比较函数key。该函数可接受一个值并返回一个排序关键字。如果要使用自定义比较函数,则需要将参数key设置为该函数名。
# 排序规则的自定义示例: def to_lowercase(word): """将string小写化然后返回""" return word.lower() words = ["Wombat", "Dog", "Cat", "Giraffe"] words.sort(key=to_lowercase) print(words) # ['Cat', 'Dog', 'Giraffe', 'Wombat']
三、按多个关键字排序
在排序时,如果有多个关键字,可以使用多重排序,即按照多个关键字进行排序。多重排序方法为:将多个排序关键字放入元组,将这些元组放入列表,然后使用sorted()函数进行排序即可。
# 按多个关键字排序示例: students = [ {"name": "Amy", "age": 31, "score": 80}, {"name": "Bob", "age": 24, "score": 90}, {"name": "Charlie", "age": 28, "score": 75}, {"name": "David", "age": 28, "score": 80}] sorted_students = sorted(students, key=lambda s: (s["age"], s["score"])) print(sorted_students)
四、使用numpy对多维列表进行排序
对于多维列表,numpy的sort方法是一个更好的选择。使用numpy的sort函数可以对多维数组的任意列或行进行排序。
# 对多维列表的排序示例: import numpy as np data = np.array([[5, 9, 8], [4, 7, 6], [3, 2, 1]]) sorted_data = np.sort(data, axis=0) # 按列排序 print(sorted_data)
五、稳定排序和不稳定排序
稳定排序指输入中相等的元素在输出中的相对位置不发生改变。而不稳定排序则不保证相等元素的相对位置。
Python中的内置排序排序sorted()是稳定的排序。
# 稳定排序示例: words = ["Dog", "cat", "bat", "Timberwolf", "giraffe", "elephant", "cow"] sorted_words = sorted(words, key=str.lower) print(sorted_words) # ['bat', 'cat', 'cow', 'Dog', 'elephant', 'giraffe', 'Timberwolf']
六、使用operator模块进行排序
Python的operator模块提供了一些方便的函数,使之易于排序。
# operator模块排序示例: import operator data = [("apple", 1), ("orange", 3), ("banana", 2)] sorted_data = sorted(data, key=operator.itemgetter(1)) print(sorted_data)
七、总结
Python中的列表可用于存储和操作数据。对于Python列表的排序,主要使用内置函数sorted()。排序时,可以使用排序规则来满足多种不同的需求,如自定义排序、多重排序。
对于特别大的列表,使用numpy的sort方法会更有效率。Python还提供了操作符模块,对于某些特殊情况下的排序,则可以使用这些功能更方便的完成。