介绍
在这个实验中,你将学习如何在 Python 中检查一个列表是否按升序排列。本实验重点在于理解已排序的列表,以及如何使用 sorted() 函数对其进行操作。你将学习如何从现有列表创建一个已排序的列表,如何使用 reverse 参数按升序和降序进行排序,以及观察原始列表保持不变的情况。
本实验将指导你在 ~/project 目录下创建一个名为 sort_list.py 的 Python 脚本,添加代码片段,并运行该脚本来观察输出。你将看到 sorted() 函数如何在不修改原始列表的情况下返回一个新的已排序列表,以及如何使用 reverse 参数按降序排序。然后,实验将进一步介绍检查列表是否已排序的其他方法。
理解排序列表
在这一步中,你将学习 Python 中的已排序列表。已排序列表就是元素按特定顺序(升序或降序)排列的列表。理解如何创建和操作已排序列表是 Python 编程的一项基本技能。
让我们从创建一个简单的数字列表开始:
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
print(numbers)
将此代码保存到 ~/project 目录下一个名为 sort_list.py 的文件中。你可以使用 VS Code 编辑器来创建和编辑这个文件。
现在,在终端中使用以下命令运行脚本:
python sort_list.py
你应该会看到原始列表打印到控制台:
[3, 1, 4, 1, 5, 9, 2, 6]
要创建此列表的排序版本,你可以使用 sorted() 函数。sorted() 函数接受一个可迭代对象(如列表)作为输入,并返回一个所有元素按升序排列的新列表:
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_numbers = sorted(numbers)
print(sorted_numbers)
修改你的 sort_list.py 文件以包含 sorted() 函数。再次运行脚本:
python sort_list.py
现在,你应该会看到已排序列表打印到控制台:
[1, 1, 2, 3, 4, 5, 6, 9]
原始列表 numbers 保持不变。sorted() 函数会创建一个新的已排序列表,而不修改原始列表。
你还可以使用 reverse 参数按降序对列表进行排序:
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_numbers_desc = sorted(numbers, reverse=True)
print(sorted_numbers_desc)
将此代码添加到你的 sort_list.py 文件中并运行:
python sort_list.py
你将看到列表按降序排列:
[9, 6, 5, 4, 3, 2, 1, 1]
理解 sorted() 函数以及如何使用 reverse 参数对于处理 Python 中的已排序列表至关重要。
使用 sorted() 进行比较
在这一步中,你将更深入地了解 sorted() 函数,并将其与另一种列表排序方法 —— list.sort() 方法进行比较。理解这两种方法之间的差异对于在 Python 中高效、有效地操作列表至关重要。
让我们先回顾一下 sorted() 函数。正如你在上一步中学到的,sorted() 会返回一个新的已排序列表,而不会修改原始列表。
现在,让我们来探索 list.sort() 方法。这个方法会对列表进行原地排序,也就是说它会直接修改原始列表。
考虑以下示例:
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
numbers.sort()
print(numbers)
将此代码添加到你的 sort_list.py 文件中,替换之前的内容。然后,运行脚本:
python sort_list.py
你应该会看到原始列表 numbers 被修改并按升序排序:
[1, 1, 2, 3, 4, 5, 6, 9]
注意,numbers.sort() 不会返回一个新列表,而是直接修改现有列表。
以下是这两种方法的比较:
sorted(list):- 返回一个新的已排序列表。
- 原始列表保持不变。
- 可用于任何可迭代对象(例如,元组、字符串)。
list.sort():- 对列表进行原地排序(修改原始列表)。
- 返回
None。 - 只能用于列表。
为了进一步说明这种差异,让我们尝试将 list.sort() 的结果赋值给一个变量:
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
sorted_numbers = numbers.sort()
print(sorted_numbers)
print(numbers)
运行此代码:
python sort_list.py
你将看到以下输出:
None
[1, 1, 2, 3, 4, 5, 6, 9]
如你所见,sorted_numbers 为 None,因为 numbers.sort() 对列表进行原地修改并返回 None。numbers 列表现在已排序。
在 sorted() 和 list.sort() 之间进行选择取决于你的具体需求。如果你想保留原始列表不变,请使用 sorted()。如果你想直接修改列表且不需要保留原始列表,list.sort() 会更高效。
使用 all() 和 zip() 进行检查
在这一步中,你将学习如何使用 all() 和 zip() 函数来检查列表是否已排序。这些函数提供了一种简洁而高效的方法来验证列表中元素的顺序。
首先,让我们了解一下 zip() 函数。zip() 函数接受多个可迭代对象(例如列表)作为输入,并返回一个元组迭代器,其中每个元组包含来自输入可迭代对象的对应元素。
考虑以下示例:
list1 = [1, 2, 3]
list2 = [4, 5, 6]
zipped = zip(list1, list2)
print(list(zipped))
将此代码添加到你的 sort_list.py 文件中,替换之前的内容。然后,运行脚本:
python sort_list.py
你应该会看到以下输出:
[(1, 4), (2, 5), (3, 6)]
zip() 函数创建了一个迭代器,该迭代器生成包含 list1 和 list2 对应元素的元组。
现在,让我们了解一下 all() 函数。all() 函数接受一个可迭代对象作为输入,如果可迭代对象中的所有元素都为真,则返回 True,否则返回 False。
考虑以下示例:
bool_list = [True, True, True]
print(all(bool_list))
bool_list = [True, False, True]
print(all(bool_list))
将此代码添加到你的 sort_list.py 文件中并运行:
python sort_list.py
你将看到以下输出:
True
False
现在,让我们结合使用 zip() 和 all() 来检查列表是否已排序。思路是将列表中的每个元素与其下一个元素进行比较,检查列表是否按升序排列。
numbers = [1, 2, 3, 4, 5]
is_sorted = all(numbers[i] <= numbers[i+1] for i in range(len(numbers)-1))
print(is_sorted)
numbers = [1, 2, 5, 4, 5]
is_sorted = all(numbers[i] <= numbers[i+1] for i in range(len(numbers)-1))
print(is_sorted)
修改你的 sort_list.py 文件以包含此代码。再次运行脚本:
python sort_list.py
你应该会看到以下输出:
True
False
此代码使用带有 zip() 的生成器表达式来比较列表中的相邻元素。然后,all() 函数检查所有比较结果是否都为真,以此表明列表已排序。
这种方法为在 Python 中检查列表是否已排序提供了一种简洁而高效的方式。
总结
在本次实验中,你首先了解了 Python 中的排序列表,即元素按特定顺序排列的列表。你学习了如何创建一个列表,然后使用 sorted() 函数生成一个元素按升序排列的新列表,并观察到原始列表保持不变。
此外,你通过在 sorted() 函数中使用 reverse=True 参数来探索降序排序。这使你能够创建一个元素从大到小排列的新列表,巩固了你对如何在 Python 中操作和创建排序列表的理解。



