1.首先来区别sort和sorted,他们最主要的区别就是:
sort函数是对当前序列直接修改,修改后直接影响当前序列的顺序。
而sorted是创建一个新的序列,需要赋新值保存,而不对原序列进行改变。
举个栗子:
sort函数:
a=[4,4,5,3,1,9]
a.sort()
print(a)
运行结果为:
[1, 3, 4, 4, 5, 9]
而sorted函数:
a=[4,4,5,3,1,9]
sorted(a)
print(a)
运行结果为:
[4, 4, 5, 3, 1, 9]
**************************************************************************************************************
2.然后我们再来看看这两个函数的具体参数
sort函数:
形式为:a.sort()
a为要排的序列,sort的主要参数有key,reverse。
先讲简单的,reverse参数即问你需要升序or降序,reverse=True表示降序。如果不写reverse,默认reverse=False表示升序。
key顾名思义就是排序的“钥匙”,也就是排序的方法和关键点是什么。
************************************注意key参数必须是一个函数***************************************,也就是说无论你的key多么简单,比如:你只通过比较第二位数字来对一个列表进行排序,你也需要写一个函数来返回每个数字的第二位。
举个栗子:
list1 = ['48', '32', '51', '17']
def sort2(num):
return num[1]
list1.sort(key=sort2) #key后面只能跟函数
list1=list(map(int,list1))
print(list1)
这里定义了sort2,根据列表的每个数字的第二位进行排序,定义一个字符串列表,实际中可以先用map将整形列表转化成字符串形式的列表再返回每个字符串的第二位字符,如果最后要用到整形形式那么再用map转换回去就可以了,如图。
运行结果为:
[51, 32, 17, 48]
************************************************************************************************************
sorted:
形式为:a=sorted(b)
以字典排序举例,更快的,我们可以用lambda快捷写函数:
(这里表示key为按键排,也就是name来排,排序时会依次比较每一个字符,由于name12345前面的name都是一样的,所以就比较后面的数字就可以了,然后reverse=True降序排列)
a = {'name1':'熊','name3':'八个雅鹿','name4':'赵同学','name5':'张同学'} #先创造空字典才能写入
a['name2'] = '小王同学' #添加一个值
a = sorted(a.items(),key=lambda a:a[0],reverse=True)
#固定用法,a:a[0]代表用键排,a:a[1]代表用值排,默认为升序(即默认reverse=False)
# #reverse=True则表示降序排,key=None也可以直接排序
#sorted排序后面key=一个函数,lambda是简写函数
#lambda '变量' :'要进行的操作,返回值'
运行结果为:
[('name5', '张同学'), ('name4', '赵同学'), ('name3', '八个雅鹿'), ('name2', '小王同学'), ('name1', '熊')]
*****************************************************************************************************
因此更快的,我们对刚刚的sort有更简单的写法(利用lambda直接返回第二位字符):
list1 = ['48', '32', '51', '17']
list1.sort(key=lambda list1:list1[1]) #key后面只能跟函数
list1=list(map(int,list1))
print(list1)
运行结果与上结果一致,为:
[51, 32, 17, 48]
**************************************************************************************************************
3.最后对lambda做个简单解释:
如下为例:
x=lambda a,b,c:a+b+c
print(x(1,2,3))
表示输出1+2+3的结果,即6
其中,a,b,c表示lambda的对象, ‘ :’之后表示返回的值。这里表示执行a+b+c并返回这个值,最后定义函数名为x,因此调用这个函数只需要填充a,b,c的值。