了解 Python 的sort()和sorted()函数

内容分享6小时前发布
0 0 0

了解 Python 的sort()和sorted()函数

排序是 Python 中的一个基本操作,该语言提供了两种主要的数据排序方法:sort()sorted()。虽然两者都用于按特定顺序排列数据,但它们的工作方式略有不同,并且用于不同的场景。了解 sort()sorted() 之间的区别可以协助编写更高效、可读性的 Python 代码。

了解sort()

sort() 方法是一种内置的列表方法,用于对列表的元素进行排序。这意味着原始列表将被修改,并且不会创建新列表。sort() 方法可以按升序或降序对列表进行排序,也可以使用 key 参数根据自定义条件进行排序。

本地排序

当使用 sort() 时,原始列表将重新排列为排序顺序。由于排序是本地进行的,因此此方法的内存效率更高,由于它不需要创建新列表。但是,这也意味着您将丢失列表的原始顺序,除非您在排序之前创建副本。

语法:

list.sort(key=None, reverse=False)
  • key:用作排序比较的 key 的函数。它默认为 None,这意味着列表元素直接排序。
  • reverse:一个布尔值,如果设置为 True,则按降序对列表进行排序。默认值为 False

用法

示例 1:使用 sort() 进行基本排序

numbers = [3, 1, 4, 1, 5, 9]
numbers.sort()
print(numbers)

输出:

[1, 1, 3, 4, 5, 9]

在此示例中,sort() 按升序重新排列数字的元素,并修改原始列表。

示例 2:使用 keyreverse 排序

words = ["banana", "apple", "cherry"]
words.sort(key=len, reverse=True)
print(words)

输出:

['banana', 'cherry', 'apple']

在这里,sort() 使用 key=len 参数按长度降序对单词列表进行排序。

了解sorted()

sorted() 函数是一个内置的 Python 函数,它从任何可迭代对象(如列表、元组或字符串)的元素中返回一个新的排序列表,而无需修改原始可迭代对象。与仅适用于列表的 sort() 不同,sorted() 可用于任何可迭代对象,并且始终返回包含已排序元素的新列表。

创建新的排序列表

当使用 sorted() 时,原始的 iterable 保持不变,并创建一个包含已排序元素的新列表并返回。这使得 sorted() 在需要在使用 sorted 版本时保留原始数据时成为更好的选择。

语法:

sorted(iterable, key=None, reverse=False)
  • iterable:要排序的序列(如列表、元组或字符串)。
  • key:用作排序比较的 key 的函数。默认为 None
  • reverse:一个布尔值,如果设置为 True,则按降序对列表进行排序。默认值为 False

用法

示例 1:使用 sorted() 进行基本排序

numbers = [3, 1, 4, 1, 5, 9]
sorted_numbers = sorted(numbers)
print(sorted_numbers)
print(numbers)

输出:

[1, 1, 3, 4, 5, 9]
[3, 1, 4, 1, 5, 9]

在此示例中,sorted() 返回一个新的排序列表sorted_numbers,而原始数字列表保持不变。

示例 2:使用 keyreverse 排序

words = ["banana", "apple", "cherry"]
sorted_words = sorted(words, key=len, reverse=True)
print(sorted_words)
print(words)

输出:

['banana', 'cherry', 'apple']
['banana', 'apple', 'cherry']

在这里,sorted() 返回一个新列表sorted_words按单词的长度降序排序,原始单词列表不受影响。

sort()和sorted()之间的主要区别:

1. 可变性与不变性

  • sort():就地修改原始列表,这意味着原始顺序丢失。
  • sorted():返回一个新的排序列表,保持原始可迭代对象不变。

2. 返回值

  • sort():不返回任何值(返回 None);它直接更改了它被调用的列表。
  • sorted():返回包含已排序元素的新列表。

3. 使用范围

  • sort():只能用于列表。
  • sorted():可用于任何可迭代对象,包括列表、元组和字符串。

4. 性能注意事项

  • sort():内存效率更高,由于它对列表进行了就地排序。
  • sorted():创建一个新列表,因此它需要额外的内存,但它更通用,由于它适用于任何可迭代对象。

在以下情况下使用sort():

希望就地对列表进行排序

  • 如果不需要保持列表的原始顺序,并且想节省内存,请使用 sort()。当只处理已排序的数据而不需要保留未排序的版本时,这是理想的选择。

只使用列表

  • sort() 是专门为列表设计的。如果确定数在一个列表中,并你不需要一个新的列表,那么 sort() 是一个不错的选择。

性能很重大

  • 由于 sort() 就地运行,因此它可以更节省内存,尤其是对于大型数据集,由于它不会创建新列表。

例:

data = [3, 1, 4, 1, 5, 9]
data.sort()
print(data)  # Output: [1, 1, 3, 4, 5, 9]

在以下情况下使用sorted():

需要保留原始数据

  • 如果您需要保持数据的原始顺序不变并创建新的排序版本,请使用 sorted()。当需要原始列表进行进一步操作时,这超级有用。

正在使用 lists 以外的可迭代对象

  • sorted() 适用于任何可迭代对象,例如 Tuples 或 Strings,当不专门处理列表时,它是一个更通用的选项。

需要快速的一次性排序

  • 如果你需要一个 iterable 的 sorted 版本而不修改原始版本,并且你不打算重用 sorted 版本,那么 sorted() 很方便。

例:

data = [3, 1, 4, 1, 5, 9]
sorted_data = sorted(data)
print(sorted_data)  # Output: [1, 1, 3, 4, 5, 9]
print(data)  # Original list remains unchanged: [3, 1, 4, 1, 5, 9]
© 版权声明

相关文章

暂无评论

none
暂无评论...