如何使用 Python 的 sorted() 函数来对列表进行排序?
Python的sorted()函数是非常有用的,可以在对列表进行排序时轻松地实现这一过程。这个函数实际上返回一个新的列表,其中包含了排序后的结果,同时原始列表并没有发生改变。其中的排序的算法是Timsort算法(蒂姆排序算法),也被称为混合排序算法。这个算法被证明是极其有效的,而且灵活性强。因此,在实际生产中,它是经常用来进行排序的算法之一。以下是如何使用Python的sorted()函数对列表进行排序的例子:
首先,让我们假设您有一个名为“numbers”的数字列表,它是这样的:
numbers = [10, 4, 7, 3, 2, 1]
这是一个没有排序的列表,但我们可以使用sorted()函数将其进行排序。我们可以简单地调用sorted()函数,传递列表作为参数,如下所示:
sorted_numbers = sorted(numbers)
现在“sorted_numbers”列表包含有序的数字,而原始列表“numbers”没有发生任何变化。如果我们打印输出“sorted_numbers”,我们可以看到其值:
[1, 2, 3, 4, 7, 10]
可以看出,这个列表已按从小到大的顺序排列。如果您想按照与默认排序不同的方式进行排序,例如按从大到小的顺序排序,您可以使用反向排序,这可以通过将“reverse = True”选项传递给sorted()函数来实现,如下所示:
sorted_numbers = sorted(numbers, reverse=True)
打印输出“sorted_numbers”输出结果:
[10, 7, 4, 3, 2, 1]
输出的列表已进行反向排序,即按从大到小的顺序排列。
除此之外,您还可以对列表进行复杂排序。假设您有一个名为“contacts”的人员列表,并且每个人的姓名和姓氏都包含在一个名为“name”的列表中,如下所示:
contacts = [{'name': 'Jordan Marshall', 'age': 26},
{'name': 'Sam Smith', 'age': 35},
{'name': 'Will White', 'age': 44},
{'name': 'Andrew Zhang', 'age': 20},
{'name': 'Mark Lee', 'age': 31}]
我们可以按照各自姓名的首字母进行排序。要实现这一点,我们可以在sorted()函数中使用键函数。我们可以定义一个实际上对我们感兴趣的内容进行比较的键函数,该键函数可以在对比姓名时选择使用“name”的值。这可以通过使用lambda函数来实现。因此,以下是如何按姓名字母顺序对人员列表进行排序:
sorted_contacts = sorted(contacts, key=lambda x: x['name'])
即使在列表中有字母大小写不一致的人名,通过lambda函数也能轻松实现不区分大小写的按姓名首字母排序:
sorted_contacts = sorted(contacts, key=lambda x: x['name'].lower())
在以上两个排序中,“sorted_contacts”都被赋予按姓名首字母顺序排列的列表值:
[{'name': 'Andrew Zhang', 'age': 20},
{'name': 'Jordan Marshall', 'age': 26},
{'name': 'Mark Lee', 'age': 31},
{'name': 'Sam Smith', 'age': 35},
{'name': 'Will White', 'age': 44}]
sorted()函数实际上非常强大,可以用于各种排序需求的列表。不仅如此,使用lambda函数可以对列表内的任何值进行排序。在排序的过程中,请牢记sorted()函数返回一个新的列表和一个排序的结果,而原始列表将会保持不变。
