如果您有一个字符串(文本项)列表,并且需要按字母顺序对它们进行排序,该怎么办?在本文中,我们将向您展示如何在 Python 中对列表进行排序。
排序算法将列表中的元素按特定顺序排列。它们有助于降低问题的复杂性,甚至可以优化其他算法。
由于其复杂性,排序是计算机科学中最重要的问题之一。简而言之,排序可以定义为按有序序列排列项目。尽管排序算法的概念乍一看很简单,但事实并非如此;对它的研究始于 70 年前。
自己编写一个好的排序函数并不容易。幸运的是,Python 带有内置排序函数。本文将探讨如何在 Python 中使用
sort()
并按
sorted()
字母顺序排序。
Python 中排序的简单示例
排序算法的应用范围很广。例如,政府组织、商业企业和金融机构都通过排序来组织数据。存储排序后的数据可使算法以后更容易搜索。
那么,在 Python 中如何按字母顺序对列表进行排序呢?让我们看一个简单的例子。
注意: 如果您不知道列表是什么以及为什么它是一种非常重要的 Python 数据结构,请查看我们的文章 Python 列表、元组和集合 。您可能还想参考 初学者应该知道的 Python 术语第 1 部分 和 第 2 部分 以获取更多信息。最后,我鼓励您报名参加我们的交互式 Python 数据结构课程, 以便您可以练习这些新技能。
回到 Python 排序。下面是简单排序的代码:
>>> mylist = ["world", "", "pineapple", "bicycle"]
>>> sorted_list = sorted(mylist)
>>> print(sorted_list)
['', 'bicycle', 'pineapple', 'world']
上面,列表
mylist
以无特定顺序保存字符串“world”、“”、“pineapple”和“bicycle”。我们希望对这个列表进行排序,并将其存储为一个名为的新变量
sorted_list
。在 Python 中,按字母顺序对列表进行排序就像将字符串列表传递给方法一样简单
sorted()
。字符串根据其首字母(AZ)按字母顺序排序。但是,以大写字母开头的单词排在以小写字母开头的单词之前。(
注意
:这意味着“Zebra”将列在“apple”之前,因为“Zebra”以大写字母开头。)
现在我们了解了什么是排序,我们可以开始编写代码了!
使用 sort() 在 Python 中按字母顺序对列表进行排序
首先,让我们使用 Python 方法按字母顺序对列表进行排序
sort()
。默认情况下,
sort()
将按升序(A-Z)排列项目。
我们来看看和之前一样的列表:
>>> mylist = ["world", "", "pineapple", "bicycle"]
>>> mylist.sort()
>>> print(mylist)
['', 'bicycle', 'pineapple', 'world']
但请注意,该
sort()
方法将直接
修改初始
项目列表,并且无法撤消任何更改。
如果要按降序(Z-A)对项目进行排序,可以通过在
s或t()
as
True
or
False
.
>>> mylist = ["world", "", "pineapple", "bicycle"]
>>> mylist.sort(reverse=True)
>>> print(mylist)
['world', 'pineapple', 'bicycle', '']
我们开始吧!
mylist
现在按降序排列。
值得注意的是,该
sort()
函数按原位排序,即不需要任何额外的空间。根据
维基百科
:
就地算法无需辅助结构即可转换输入数据。
就地算法背后的理念是空间效率。换句话说,我们希望使用最少的硬件资源来完成任务。本质上,输出是在保存输入的同一内存空间中生成的;数据在就地进行连续转换。这避免了通过保留输入的副本来使用两倍的存储空间。
那么,您应该使用 sort()吗?
如果您正在处理重要数据,甚至有可能需要在未来检索原始数据,那么这
sort()
不是最好的选择,因为它会修改原始列表。
另一方面,如果数据是副本或不重要的工作数据,那么这
sort()
可能是一个不错的选择。另一个选择是使用
sorted()
。
使用 sorted() 在 Python 中按字母顺序对列表进行排序
Python 还具有函数
sorted()
,我们在开头的例子中使用了它。与相反
sort()
,此方法不会修改原始列表;它
返回一个新列表
,其内容与原始列表相同,但按字母顺序排列。例如:
>>> new_list = ["Python", "welcome", "hello", "programming", "sorting", "zebra", "alligator"]
>>> sort_newlist = sorted(new_list)
>>> print(sort_newlist)
['Python', 'alligator', 'hello', 'programming', 'sorting', 'welcome', 'zebra']
这里,排序后的结果
new_list
存储在名为 的变量中
sort_newlist
。我们始终可以访问该
new_list
变量。
Similar to
sort()
,
sorted()
也有一个
reverse
默认为 False 的参数。我们将其设置为
True
按降序
new_list
重新排列
>>> new_list = ["Python", "welcome", "hello", "programming", "sorting", "zebra", "alligator"]
>>> sort_newlist = sorted(new_list, reverse=True)
>>> print(sort_newlist)
['zebra', 'welcome', 'sorting', 'programming', 'hello', 'alligator', 'Python']
使用键在 Python 中按字母顺序对列表进行排序
默认情况下
sort()
和
sorted()
使用比较运算符
<
。您可以通过指定 key 参数来修改排序时使用的顺序。
之前,我们了解了这一点,
sort()
并
sorted()
优先考虑大写字符串。但是,我们可能需要不区分大小写的排序。这可以通过将 key 参数设置为
str.lower
(将所有字符串转换为小写字符)来实现。要对数据使用这种类型的排序,您需要一个函数或任何其他可调用函数,该函数接受一个参数并返回用于排序的键。这种技术很快,因为 key 函数对于每个输入仅调用一次。
>>> mylist = ["world", "", "pineapple", "bicycle", "Anaconda", "Jupyter"]
>>> mylist.sort(key=str.lower)
>>> print(mylist)
['Anaconda', 'bicycle', 'Jupyter', '', 'pineapple', 'world']
类似地,还有
sorted()
:
>>> mylist = ["world", "", "pineapple", "bicycle", "Anaconda", "Jupyter"]
>>> sort_mylist = sorted(mylist, key=str.lower)
>>> print(sort_mylist)
['Anaconda', 'bicycle', 'Jupyter', '', 'pineapple', 'world']
我们还可以使用自定义
lambda
函数作为键参数。假设我有一个包含人员姓名、职业和位置的元组列表。我们希望根据每个元组的第二项按升序对它们进行排序。这可以通过自定义函数来完成
lambda
:
>>> people = [('Anna', 'New York', 'Data Analyst'),('Chris', 'Berlin', 'Software Developer'),('Nancy', 'Toronto', 'Data Scientist')]
>>> sorted_people = sorted(people, key=lambda x: x[1])
>>> print(sorted_people)
[('Chris', 'Berlin', 'Software Developer'), ('Anna', 'New York', 'Data Analyst'), ('Nancy', 'Toronto', 'Data Scientist')]
输出是一个按城市字母顺序排序的列表,因为
x[1]
访问元组的第二项(即城市名称)。您可以在我之前关于
自定义排序函数的
.
让我们看一下上面的例子,但这次是
sort()
:
>>> people = [('Anna', 'New York', 'Data Analyst'),('Chris', 'Berlin', 'Software Developer'),('Nancy', 'Toronto', 'Data Scientist')]
>>> people.sort(key=lambda x: x[1])
>>> print(people)
[('Chris', 'Berlin', 'Software Developer'), ('Anna', 'New York', 'Data Analyst'), ('Nancy', 'Toronto', 'Data Scientist')]
结果是一样的,但是我们无法再访问原始人员列表。
Python 排序算法的稳定性
最后,
sort()
和
sorted()
保证是稳定的。稳定排序意味着两个具有相同键的对象在排序后的输出中的出现顺序与它们在原始输入中的出现顺序相同。换句话说,稳定排序确保在输出中保留具有相同排名的数据的原始顺序。
排序算法的稳定性使得原始列表存在多个不同的正确排序版本的可能性。
稳定的排序算法对于保持相等元素的顺序至关重要。要被视为稳定排序算法,它们不应改变被比较元素的相对顺序。这有助于排序,例如,如果我们需要分多次进行排序(例如按城市和职业排序)或类似操作。
另一方面,非稳定排序可能会打乱一个元素的顺序,而按另一个元素排序。在本例中,按城市排序可能会打乱姓名顺序,导致列表中的人员按城市排序,但同一城市内的人员不按姓名排序,尽管他们最初是按姓名排序的。
在处理更复杂的列表时,这一点尤其重要。例如,您可以有一个元组列表,其中字符串作为第一个元素。您可以按第一个参数的字母顺序对列表进行排序,但每个元组的第二个参数的原始顺序将保留。
准备好用 Python 练习排序了吗?
本文探讨了如何在 Python 中按字母顺序对列表进行排序。我们发现了如何
sort() and sorted()
在 Python 中使用排序以及它们之间的区别。我们还简要介绍了 Python 中排序算法的稳定性。
现在您已经对 Python 中的排序有了扎实的了解,请继续使用上面的代码片段来实现您自己的解决方案。
最后,别忘了查看我们的交互式 Python 内置算法课程 。它为您提供扎实的 Python 编程实践。您还可以访问 了解有关我们的 Python 课程的更多信息。
发表评论 取消回复