您的位置:

Python List排序技巧:快速整理列表数据

一、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还提供了操作符模块,对于某些特殊情况下的排序,则可以使用这些功能更方便的完成。