geekdoc-python-zh/docs/pythoncentral/how-to-sort-a-list-in-pytho...

6.6 KiB
Raw Permalink Blame History

如何在 Python 中对列表进行排序

原文:https://www.pythoncentral.io/how-to-sort-a-list-in-python/

每个程序员都必须编写在某些时候涉及到数据排序的代码。随着 Python 技能的进步,您可能会发现自己正在处理一个排序问题,这个问题对于应用程序中的用户体验至关重要。

您可能需要编写代码来通过时间戳跟踪用户活动。您可能还需要编写一个脚本,按照字母顺序排列电子邮件收件人。

Python 拥有内置的排序功能,这使得程序员可以很容易地对不同类型的数据进行排序。该语言还包括一些特性,使程序员能够在粒度级别定制排序操作。

这里有一个如何在 Python 中对列表排序的快速指南。

如何在 Python 中对列表进行排序

Python 有两个内置函数可以帮助你对列表进行排序:sort()和 sorted()。这两个函数使用相同的参数。但是,这两个函数具有不同的语法,并且与 iterables 的交互方式也不同。

也就是说,学会使用这两个功能会让列表排序变得轻而易举。如果你不熟悉用 Python 创建一个列表,在阅读之前先浏览一下我们的 简易指南 是个不错的主意。

下面是如何使用这两种排序方法的详细分析。

分类方法

Python list sort()方法允许程序员按照升序和降序对数据进行排序。默认情况下,该方法将按升序对列表进行排序。

程序员也可以编写一个函数来定制排序标准。

排序方法的语法是:

*list*.sort(reverse=True|False, key=myFunc)

其中“列表”必须替换为存储数据的变量名。sort()函数不返回任何值。它直接对列表中的值进行排序,而不创建新的变量来存储排序后的列表。

下面是一个如何使用 sort()函数对数据进行升序排序的例子:

names = ['Liam', 'Noah', 'Emma']
names.sort()

print(names)

输出将是:

['Emma','Liam','Noah']

因素

sort()函数不需要任何参数就能工作。但是,如果您想改变数据的排序方式,可以使用以下参数:

  • 键: 该参数作为排序操作的键。
  • 反转: 如果参数设置为“真”,列表将按降序排序。

下面是一个使用 reverse 参数对列表进行降序排序的例子:

names = ['Liam', 'Noah', 'Emma']
names.sort(reverse=True)

print(names)

代码的输出是:

['Noah', 'Liam', 'Emma']

您可以使用 key 参数根据长度对列表进行排序。下面是一个执行此操作的脚本示例:

def myFunc(e):
  return len(e)

names = ['Emily', 'Fred', 'Robert']
names.sort(key=myFunc)
print(names)

脚本的输出是:

['Fred', 'Emily', 'Robert']

排序方法

另一种在 Python 中对列表进行升序或降序排序的方法是使用 sorted()方法。像 sort()一样它不需要定义因为它是一个内置函数。Python 的每个标准版本都带有内置的方法。

此外,它可以不带任何参数使用,类似于 sort()。默认情况下,该函数按升序排列数据。

然而,与 sort()不同的是sorted()函数将排列后的值存储在一个新的列表中。应用该函数后原始列表保持不变。相反sort()函数返回“无”

因此,由函数返回的数据的有序列表可以在函数执行后被分配给变量。

Python 中可以迭代的对象称为 iterables。sorted()方法适用于所有的。换句话说除了列表sorted()还可以处理字符串、元组和集合。

该方法的语法为:

sorted(iterable, key, reverse)

使用 sorted()的另一个优点是,您可以将值传递给它,而不必先创建一个变量并在其中存储值。

例如:

sorted([10, 9, 8, 7, 6])
#result = [6,7,8,9,10]

这并不是说 sorted()函数不能处理变量:

>>> exampleList = [7, 9, 2, 4]
>>> sorted(exampleList)
[2, 4, 7, 9]
>>> exampleList
[7, 9, 2, 4]
# Values of exampleList did not change. New list was returned.

参数

sorted()方法与 sort()共享参数。使用“reverse”参数将按降序输出一个列表您可以使用“key”参数定义排序顺序。

下面是一个使用 sorted()方法进行降序排序的例子:

>>> names = ['Liam', 'Noah', 'Emma']
>>> sorted(names)
['Emma', 'Liam', 'Noah']
>>> sorted(names, reverse=True)
['Noah', 'Liam', 'Emma']

排序逻辑没有改变——名字仍然按照第一个字母排序。但是由于参数设置为“真”输出已经反转如果参数设置为“False”结果将保持不变。

“key”参数是 sorted()方法中最强大的组件。它期望传递一个函数,然后对列表中的每个值使用该函数来导出数据的顺序。

例如,您可以使用关键字参数根据单词的长度对单词列表进行排序

>>> exampleWords = ['cat', 'mouse', 'chicken', 'bird']
>>> sorted(exampleWords, key=len)
['cat', 'bird', 'mouse', 'chicken']

要按长度降序排列上面的列表,可以将 key 参数与 reverse 参数结合使用。

>>> exampleWords = ['cat', 'mouse', 'chicken', 'bird']
>>> sorted(exampleWords, key=len, reverse=True)
['chicken', 'mouse', 'bird', 'cat']

有时,您可以使用 lambda 函数,这是一个内置函数,而不是编写一个独立的函数来使用 key 参数。

匿名功能有四个特点:

  1. 必须内联定义;
  2. 它不能包含语句;
  3. 它没有名字;和
  4. 它就像一个函数一样执行。

假设一个程序员想写一个程序,根据数字的绝对值对它们进行排序。

这个脚本看起来应该是这样的:

num_list = [1,-5,3,-9,25,10]
def absolute_value(num):
   return abs(num)
num_list.sort(key = absolute_value)
print(num_list)

但是,我们可以使用下面的代码行,而不是编写 absolute_value 函数并将其分配给 key 参数:

num_list.sort(key = lambda num: abs(num))

结论

选择使用哪种方法对列表进行排序可能会令人困惑。这里有一个选择方法的好方法:

如果你不需要原始列表,使用 sort()是正确的方法。它不创建新的列表,因此使用更少的内存并提高代码的效率。

然而,如果你认为你以后需要访问原始列表,你必须使用 sorted()函数。

Python 能帮你做的不仅仅是排序数据。阅读 我们的使用指南 是了解 Python 所有功能的好方法。