python中sort()和sorted()

在py中,排序经常用到的两个函数,一个是sort(), 一个是sorted(). 两者的使用是有一些差别的。

1. sort()排序只对列表排序,且会改变原列表的元素顺序,因为不会创建新的列表,所以效率较高。

2. sorted()是在sort()基础上又延申的排序函数,对可迭代对象都可以排序,即对列表、字符串、元组、字典等均可排序。但它不会改变原列表,它会创建新的列表,用来保存排序后的列表。所以,使用它比较稳妥,不会改变原数据。

sorted()函数对所有可迭代对象的排序返回的都是列表,如果想返回其他类型,可使用相应的函数去转换。

用法:

1. sort(key, reverse)参数key是规定排序规则,reverse参数默认是False升序,如果是True则为降序

1. 按照字符串长度进行排序
list1 = ['apple', 'banana', 'pitaya', 'pear', 'kiwi']
list1.sort(key=len)
print(list1)

输出结果是:
['pear', 'kiwi', 'apple', 'banana', 'pitaya']

对于元素全是字符串的列表,可以使用长度对列表进行排序,但如果遇到int这样没有len()函数的元素,就会报错TypeError: object of type ‘int’ has no len()。

2. 按照字符串的第二个字符进行排序
list1 = ['happy','sad', 'morose', 'excited', 'alert']
list1.sort(key=lambda x:x[1],reverse=True)
print(list1)

输出结果是:
['excited', 'morose', 'alert', 'happy', 'sad']

对于全是字符串的列表,可以对其元素第二个字符进行排序,但如果某个元素只有1个字符,却按照第2个字符排序,就会报错IndexError: string index out of range

3. 找到第n大的值
list1 = [4, 3, 9, 6, 1]
list1.sort(reverse=True)
print('max:', list1[0])
print('2nd max:', list1[1])

输出结果是:
max: 9
2nd max: 6

先降序,再按照索引取值,找到第一大和第二大的值。

4. 切片排序:将原列表切片 复制给新列表,再对新列表排序,同样可以实现排序且不改变原列表。
list1 = [1, 3, 2, 5]
print(id(list1))
list2 = list1[:]
print(id(list2))
list2.sort()
print(list2)
print(list1)

输出结果是:
2090106465984
2090106452096
[1, 2, 3, 5]
[1, 3, 2, 5]

使用切片法 复制给新列表创建的新列表和原列表是两个独立的列表,指向的内存地址都不同。如果直接用赋值法,那么两个列表将指向同一个内存地址,改变其中一个势必会改变另外一个。

5. sorted()对可迭代对象排序,包括对字符串、元组、字典。返回的都是列表,需要用其他函数来转换成其他类型。

str1 = '312'
print(sorted(str1))
print(reduce(lambda x,y:x+y, sorted(str1)))
print(''.join(sorted(str1)))

输出结果:
['1', '2', '3']
123
123
t = (3, 1, 5)
print(tuple(sorted(t)))

输出结果:
(1, 3, 5)



dict1 = {'name':'barren','age':28}
print(sorted(dict1))

输出结果:
['age', 'name']

对字典的排序是对键排序,不对值排序。

总结:sort()函数直接修改原列表,进行原地排序,这使其在处理大型数据集时具有显著的性能优势。sort()函数有两个重要参数:key和reverse. key参数允许我们指定一个函数,该函数将用于在比较元素时提取用于排序的键;而reverse参数则控制排序的顺序,设置为True时降序排序。

sorted()函数也用于排序,但它会返回一个新的已排序列表,而不修改原列表。这使得sorted()函数在需要保留原始列表顺序的场合下特别有用。

### Python 中 `sort` 函数的用法 在 Python 中,列表对象提供了一个名为 `.sort()` 的方法用于原地排序。此方法会修改原始列表并按照指定的方式对其进行排序。如果需要返回一个新的已排序列表而不改变原有列表,则可以使用内置函数 `sorted()`。 以下是关于 `.sort()` 方法的一些重要特性: - **默认行为**:`.sort()` 默认按升序排列元素。 - **关键字参数**: - `key`: 提供一个单参函数来决定每个元素如何被比较。这通常是一个 lambda 表达式或其他可调用的对象[^1]。 - `reverse`: 如果设置为 `True`,则以降序方式排序;默认值为 `False`(即升序)。 #### 示例代码 下面是一些具体的例子展示如何使用 `.sort()` 其参数: ```python # 基本示例:整数列表排序 numbers = [5, 2, 9, 1] numbers.sort() print(numbers) # 输出: [1, 2, 5, 9] # 字符串列表排序 words = ["banana", "apple", "cherry"] words.sort() print(words) # 输出: ['apple', 'banana', 'cherry'] # 自定义 key 排序 (基于字符串长度) custom_list = ["short", "longer string", "medium length"] custom_list.sort(key=len) print(custom_list) # 输出: ['short', 'medium length', 'longer string'] # 反向排序 descending_numbers = [3, 7, 1, 8] descending_numbers.sort(reverse=True) print(descending_numbers) # 输出: [8, 7, 3, 1] ``` 对于包含多种数据类型的复杂列表,由于不同数据类型之间无法直接比较,因此需要通过自定义 `key` 来处理这些情况。例如,在混合型列表中仅依据某种特定属性进行排序时,可以通过编写适当的转换逻辑实现这一目标。 另外需要注意的是,当尝试对不兼容的数据结构执行排序操作时可能会引发错误。比如试图在一个同时含有字符串数值的列表上调用 `.sort()` 将抛出异常除非明确了统一的标准来进行跨类型对比。 最后提到有关于 OpenAI API 调用的内容并非与当前主题紧密关联,它主要涉及外部服务交互而非本地算法应用层面的知识点[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值