一、sort( ) 和 sorted( )二者区别:
1、sort( )是列表这个类里的方法,它只能对列表进行排序,而且是直接在列表上进行操作,也就是说,排序后会将对原列表的值进行覆盖,(或者叫 排序后原列表的值会发生改变、会改变原对象的值),无返回值。
2、sorted( )它是python的内置函数,可以对任意的可迭代对象进行排序,结果返回的是一个列表,也就是说,排序后的对象类型全部为list,而原对象不会受到任何影响,即:不改变原对象的值。
举例:
a = [1, 3, 5, 2, 1]
print(sorted(a)) # 返回一个列表
print(a) # 不会改变原对象的值
结果:
[1, 1, 2, 3, 5]
[1, 3, 5, 2, 1]
a = [1, 3, 5, 2, 1]
print(a.sort())
结果:
None # 说明sort() 没有返回值
可见,sort( )是没有返回值的,所以正确使用方法如下:
a = [1, 3, 5, 2, 1]
a.sort()
print(a)
结果:
[1, 1, 2, 3, 5] # 原列表的值发生改变
二、二者语法格式:
1、sort( )语法格式:
列表名.sort(key=None,reverse=False)
2、sorted( )语法格式:
sorted(iterable,key=None,reverse=False)
二者的参数的含义都是一样的,即:
iterable:要进行排序的可迭代对象。
key:表示排序依据,通常为函数名,eg. abs、str\lower、str.upper等,或者是以函数指定可迭代对象中的某个元素来进行排序(常结合lambda()函数使用)。
reverse:排序规则,reverse=True 表示降序,reverse=False 表示升序,默认为升序。
~~~~~~前方高能~~~~~~~~~~
注意:
当要排序的对象为列表套元组时,例如:
[(1,2),(2,3),(3,4),(4,5)]
此时,如果不写key的时候,默认是先按元组的第一个成员进行排序,当第一个成员的值有相同的时候,会再对这些相同的值,按第二个成员进行排序。如果第一个成员的值没有相同的,那就只按第一个成员进行排序。
例题1:元组的第一个成员中值有相同的。
例如:(1,3)和(1,2)元组的第一个元素相同,都是1,所以根据第一个成员排序完,会再根据第二个成员进行排序。
# 用sorted()函数进行排序 ————它是python内置函数
# 法1 默认按元组的第一个成员进行排序,如果第一个成员有相同的,再对这些相同的按第二个成员进行排序。
a = [(1, 3), (1, 2), (0, 4)]
b = sorted(a)
print(b) # [(0, 4), (1, 2), (1, 3)]
# 法2 用索引来写
a = [(1, 3), (1, 2), (0, 4)] # (x[0], x[1]) 改成[x[0], x[1]],结果也是一样。
b = sorted(a, key=lambda x: (x[0], x[1])) # x[0]先按第一个成员, x[1] 按第二个成员
print(b) #[(0, 4), (1, 2), (1, 3)]
# 用sort()进行排序 ——————它是列表这个类里的方法
# 法1 用默认的方式来写
a = [(1, 3), (1, 2), (0, 4)]
a.sort()
print(a) # [(0, 4), (1, 2), (1, 3)]
# 法2 用索引
a = [(1, 3), (1, 2), (0, 4)]
a.sort(key=lambda x: (x[0], x[1]))
print(a) # [(0, 4), (1, 2), (1, 3)]
例题2:元组的第一个成员中没有相同的。那就只按第一个成员进行(升序)排序。
a = [(2, 2), (3, 4), (4, 1), (1, 3)]
b = sorted(a)
print(b)
结果:
[(1, 3), (2, 2), (3, 4), (4, 1)
延申:
1、如果只按元组的第一个成员进行升序排序。(元组的第一个成员,它的下标为0 )
a = [(1, 3), (1, 2), (0, 4)]
b = sorted(a, key=lambda x: x[0])
print(b)
结果:
[(0, 4), (1, 3), (1, 2)]
2、 如果只按元组的第二个成员进行升序排序。
a = [(1, 3), (1, 2), (0, 4)]
b = sorted(a, key=lambda x: x[1])
print(b)
结果:
[(1, 2), (1, 3), (0, 4)]