Python sort and sorted

本文详细介绍了Python中两种常用的排序方法:sorted()和sort()。通过实例演示了如何使用这两种方法对列表进行排序,并解释了它们之间的主要区别:sorted()返回新的排序列表,而sort()则在原地修改列表。
我们需要对List进行排序,Python提供了两个方法
对给定的List L进行排序,
方法1.用List的成员函数sort进行排序

方法2.用built-in函数sorted进行排序(从2.4开始)

sorted函数是内建函数,他接受一个序列,返回有序的副本
他与sort的唯一区别就是会返回副本



--------------------------------sorted---------------------------------------
>>> help(sorted)
Help on built-in function sorted in module __builtin__:

sorted(...)
    sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
---------------------------------sort----------------------------------------
>>> help(list.sort)
Help on method_descriptor:

sort(...)
    L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
    cmp(x, y) -> -1, 0, 1
-----------------------------------------------------------------------------

iterable:是可迭代类型;
cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;
key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;
reverse:排序规则. reverse = True 或者 reverse = False,有默认值。
返回值:是一个经过排序的可迭代类型,与iterable一样。
 
注;一般来说,cmp和key可以使用lambda表达式。

sort()与sorted()的不同在于,sort是在原位重新排列列表,而sorted()是产生一个新的列表。

Sorting basic:

>>> print sorted([5, 2, 3, 1, 4])
[1, 2, 3, 4, 5]
>>> L = [5, 2, 3, 1, 4]
>>> L.sort()
>>> print L
[1, 2, 3, 4, 5]

Sorting  cmp:

>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>print sorted(L, cmp=lambda x,y:cmp(x[1],y[1]))
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

Sorting  keys:

>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>print sorted(L, key=lambda x:x[1]))
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]

Sorting  reverse:

>>> print sorted([5, 2, 3, 1, 4], reverse=True)
[5, 4, 3, 2, 1]
>>> print sorted([5, 2, 3, 1, 4], reverse=False)
[1, 2, 3, 4, 5]

注:效率key>cmp(key比cmp快)


在Sorting Keys中:我们看到,此时排序过的L是仅仅按照第二个关键字来排的,如果我们想用第二个关键字
排过序后再用第一个关键字进行排序呢?
>>> L = [('d',2),('a',4),('b',3),('c',2)]
>>> print sorted(L, key=lambda x:(x[1],x[0]))
>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]

以上环境python2.4
Python中,`sort()` 和 `sorted()` 都是用于对数据进行排序的函数,但它们存在一些关键区别。 ### 区别 - **适用对象**:`sort()` 是应用在列表(list)上的方法,仅适用于列表;而 `sorted()` 是Python内置的全局方法,可以对所有可迭代的对象进行排序操作,如字符串、元组、字典、集合等 [^1][^2]。 - **对原对象的影响**:`sort()` 是对原有列表进行操作,会直接修改原列表;而 `sorted()` 返回的是一个新的可迭代对象,不会改变原来的对象 [^1][^2]。 - **返回值**:`sort()` 没有返回值(返回 `None`),因此无法将排序结果赋给一个变量;而 `sorted()` 会返回一个新的列表,可以将结果赋给一个变量 [^4]。 - **效率**:`sort()` 更快,因为它是原地排序,无需创建新列表;`sorted()` 通常比 `sort()` 稍微慢一些,因其创建了新对象 [^2]。 - **稳定性**:两者都是稳定排序,即保持相同元素的原始顺序 [^2]。 ### 用法 - **sort()**:使用方法为 `list.sort(key=None, reverse=False)`,其中 `key` 是用于指定排序规则的函数,`reverse` 为布尔值,`True` 表示降序,`False` 表示升序(默认) [^2][^3]。 - **sorted()**:使用方法为 `sorted(iterable, key=None, reverse=False)`,参数含义与 `sort()` 相同 [^2]。 ### 示例 ```python # sort() 示例 lst = [3, 1, 4, 1, 5, 9, 2, 6, 5] lst.sort() print("使用 sort() 排序后的列表:", lst) # sorted() 示例 lst = [3, 1, 4, 1, 5, 9, 2, 6, 5] new_lst = sorted(lst) print("原列表:", lst) print("使用 sorted() 排序后的新列表:", new_lst) # 对元组使用 sorted() tup = (3, 1, 4, 1, 5, 9) sorted_tup = sorted(tup) print("原元组:", tup) print("使用 sorted() 排序后的新列表:", sorted_tup) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值