目录
一、背景
1.1问题
想使用排序的函数将nums排序的结果给nums1,并不想改变nums本身,可是结果nums1为空,nums也发生了变化
1.2原因
出现了一个常见的误解,list.sort() 方法对列表进行排序,但它会就地排序原始列表,并返回 None,而不是一个新的排序后的列表。因此,当你将 nums1 设为 nums.sort() 时,nums1 实际上被赋值为 None。相当于
nums = [1, 4, 2]
nums1 = nums.sort() # 这里会将 nums 原地排序,并返回 None
print(nums1) # 这里打印的是 None
print(nums) # nums 现在已经被排序
1.3解决办法
如果你希望保留原始列表的排序副本,可以使用 sorted() 函数来创建一个新的已排序副本,而不改变原始列表。
nums = [1, 4, 2]
nums1 = sorted(nums) # 创建一个已排序副本
print(nums1) # 打印排序后的列表
print(nums) # 原始列表保持不变
二、sort和sorted
2.1 sort
2.1.1语法
无参数,无返回值。
列表对象.sort(key=None, reverse=False)
2.1.2应用
nums = [4, 2, 1, 3]
nums.sort()
print(nums) # 输出:[1, 2, 3, 4]
2.2sorted
2.2.1语法
- iterable – 可迭代对象。
- key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
sorted(iterable, key=None, reverse=False)
2.2.2应用
sorted() 函数不会修改原始列表,而是返回一个新的已排序列表。它可以用于任何可迭代对象,并且具有与 sort() 方法相同的参数。
nums = [4, 2, 1, 3]
sorted_nums = sorted(nums)
print(sorted_nums) # 输出:[1, 2, 3, 4]
print(nums) # 输出:[4, 2, 1, 3],原始列表不变