一、sorted(iterable)排序,有返回值
1、默认升序
2、自定义规则
自定义规则:
1、写一个比较函数cmp
2、套人functools模块中的cmp to key
自定义规则:当a<b返回负数、当a>b返回正数、二者相等返回0
自定义规则:当a排在前面返回负数、当b排在前面返回正数、两者相等返回0
例题一:
#按照绝对值从小到大
from functools import cmp_to_key
def cmp(a,b):
if abs(a)<abs(b):
return -1
elif abs(a)>abs(b):
return 1
else:
return 0
a=[-2,1,-3,-5,4]
sorted_a=sorted(a)
print('普通排序从大到小',sorted_a)
sorted_a=sorted(a,key=cmp_to_key(cmp))
print('按绝对值从大到小',sorted_a)
例题二:
from functools import cmp_to_key
#按二元组和小的排在前面,和相等的按第一位和小的排在前
def cmp(a,b):
if sum(a)>sum(b):
return 1
elif sum(a)<sum(b):
return -1
else:
if a[0]>b[0]:
return 1
elif a[0]<b[0]:
return -1
else:
return 0
a=[(2,3),(5,-2),(4,5),(5,0),(4,1)]
sorted_a=sorted(a)
print('普通排序从大到小',sorted_a)
sorted_a=sorted(a,key=cmp_to_key(cmp))
print('自定义排序从大到小',sorted_a)
例题三:
from functools import cmp_to_key
# 按照长度排,若长度相同,则按照字符顺序排序
def cmp(a,b):
if len(a)>len(b):
return 1
elif len(a)<len(b):
return -1
else:
if a>=b:
return 1
else:
return -1
a=['Python','Swift','Java','C++','Go','Rust']
sorted_a=sorted(a)
print('普通排序从大到小',sorted_a)
sorted_a=sorted(a,key=cmp_to_key(cmp))
print('自定义排序从大到小',sorted_a)
二、list.sort(),没有返回值
1、直接在原来列表上排序
a=[1,3,2,5,4]
sorted_a=sorted(a)
print("a=",a)
print("sorted_a=",sorted_a)
sorted_a=a.sort()
print("a=",a)
print("sorted_a=",sorted_a)
2、自定义规则,同上
from functools import cmp_to_key
def cmp(a,b):
if abs(a)>abs(b):
return 1
elif abs(a)<abs(b):
return -1
else:
return 0
a=[-2,1,-3,-5,4]
a.sort()
print('普通排序从大到小',a)
a.sort(key=cmp_to_key(cmp))
print('自定义排序从大到小',a)