1、知识点
sorted()
和sort()
函数都可以用于对可迭代对象进行排序,但它们之间有一些重要的区别:
sorted()
是一个内置函数,它接受一个可迭代对象作为参数,并返回一个新的已排序的列表。原始的可迭代对象保持不变。sort()
是一个列表方法,它在原地对列表进行排序,即修改了原始的列表,不返回新的列表。
下面是它们的使用示例:
使用sorted()
函数示例:
numbers = [3, 1, 4, 2, 5]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # 输出:[1, 2, 3, 4, 5]
print(numbers) # 输出:[3, 1, 4, 2, 5],原始列表保持不变
不变
使用sort()
方法示例:
numbers = [3, 1, 4, 2, 5]
numbers.sort()
print(numbers) # 输出:[1, 2, 3, 4, 5],原始列表被排序
因此,如果你只需要对一个列表进行排序而不需要保留原始顺序,可以直接使用sort()
方法。如果你希望保留原始列表并获得一个新的排序后的列表,可以使用sorted()
函数。
在sorted()
函数中,key
关键字参数用于指定一个可调用对象(函数),该函数将应用于要排序的每个元素,并根据返回值进行排序。具体使用方式如下:
sorted(iterable, key=key_function, reverse=False)
iterable
:表示要排序的可迭代对象,比如列表、元组等。key
:是一个可调用对象(函数),用于为每个元素提供一个用于排序的值。reverse
:默认为False
,表示升序排序。若设为True
,则表示降序排序。
以下是一个简单的示例,演示了如何使用key
关键字参数对字符串列表按照字符串长度进行排序:
words = ['apple', 'banana', 'cherry', 'date']
sorted_words = sorted(words, key=len)
print(sorted_words)
# 输出:['date', 'apple', 'cherry', 'banana']
在上面的示例中,key=len
指定了按照字符串的长度进行排序,sorted()
函数会将每个字符串传递给len()
函数并获得长度作为排序依据。
你可以根据具体需求编写自定义的key
函数来实现不同的排序规则。
2、例题(绝对值排序)
任务描述
读入一个列表,按照绝对值从大到小排序,如果绝对值相同,则正数在前面。
提示:使用list1=eval(input())
直接读入一个列表。
输入格式
题目的输入为一行,是一个元素类型都是数值的列表, 如:[3,-4,2,4]
输出格式
输出为一行,是按照绝对值从大到小排序后的列表里的元素,元素之间用一个英文半角逗号分隔,如: 4,-4,3,2
示例1
输入:[3,-4,2,4]
输出:4,-4,3,2
示例2
输入:[5.2,3,4,6,-5.2]
输出:6,5.2,-5.2,4,3
list1=eval(input())
list1.sort(key=lambda x:(abs(x),x),reverse=True)
# 或者list1 = sorted(list1, key=lambda x: (abs(x), x), reverse=True)
print(','.join(map(str,list1)))
# 或者print(*map(str,list1),sep=',',end='')
解析:
key=lambda x: (abs(x), x)
是一个匿名函数(lambda函数),用作排序的关键字函数。
abs(x)
表示对元素 x
取绝对值,而 x
则表示原始元素本身。
该 lambda 函数将每个元素 x
转换为一个元组 (abs(x), x)
,其中第一个元素是 x
的绝对值,第二个元素是 x
本身。这样,排序将根据两个因素进行:首先根据绝对值大小排序,然后在相同绝对值的情况下按照原始值进行排序。
通过这种方式,可以实现按照绝对值从大到小排序,如果绝对值相同,则正数在前面。
举个例子,假设有以下列表:
numbers = [-3, 2, -1, 4, -2]
应用上述 lambda 函数进行排序,得到的结果如下:
sorted_numbers = sorted(numbers, key=lambda x: (abs(x), x))
print(sorted_numbers)
# 输出:[4, -3, -2, -1, 2]
在上面的例子中,元素 4 和 -3 的绝对值都是 4,但由于 4 是正数,所以排在前面。元素 -2 和 -1 的绝对值都是 2,由于 -2 更小,所以排在前面。元素 2 的绝对值是 2,是正数,所以排在最后。
这样就实现了按照绝对值从大到小排序,并且相同绝对值的元素中正数在前的排序方式。