python中sorted和sort函数的用法和例题分析

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,是正数,所以排在最后。

这样就实现了按照绝对值从大到小排序,并且相同绝对值的元素中正数在前的排序方式。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值