当前位置: 首页 > 后端技术 > Python

list.sort与高阶函数sorted

时间:2023-03-26 00:11:39 Python

代码环境:python3.6两者简单对比如下:list.sort对原列表进行排序,而sorted返回的是新列表;可选参数key和reverse的含义和用法是一样的。reverse最容易使用,reverse=True时按降序输出,reverse=False时按升序输出。此参数的默认值为False。key是一个函数,我们可以使用python内置函数或者自定义函数来按照我们想要的方式对序列进行排序,我们用代码感受一下:In[1]:a_list=[36,5,-12,9,-21]In[2]:b_list=[36,5,-12,9,-21]In[3]:sorted(a_list)Out[3]:[-21,-12,5,9,36]In[4]:a_listOut[4]:[36,5,-12,9,-21]#映射后按绝对值排序In[5]:sorted(a_list,key=abs)Out[5]:[5,9,-12,-21,36]In[6]:b_list.sort()In[7]:b_listOut[7]:[-21,-12,5,9,36]In[8]:c_list=['bob','about','Zoo','Credit']In[9]:sorted(c_list)Out[9]:['Credit','Zoo','about','bob']#忽略大小写,按字母顺序排序In[10]:sorted(c_list,key=str.lower)Out[10]:['about','bob','Credit','Zoo']#按字符串排序lengthsortingIn[11]:sorted(c_list,key=len)Out[11]:['bob','Zoo','about','Credit']上面我们只使用了key是内置的情况-在函数中,我们再举个例子看看key是怎么自定义函数的。给定一个列表L=[('Bob',75),('Adam',92),('Bart',66),('Lisa',88)],列表中的每个元素都包括学生的姓名和成绩.要求:按名字排序;按等级从高到低排序。L=[('Bob',75),('Adam',92),('Bart',66),('Lisa',88)]deforder_by_name(arg_tuple):#传入的元组参数直接映射to返回元祖第一个元素进行比较returnarg_tuple[0]deforder_by_score(arg_tuple):#传入的元组参数直接映射到元祖第二个元素,返回进行比较returnarg_tuple[1]if__name__=="__main__":print('默认排序结果:{}'.format(sorted(L)))print('按名称排序结果:{}'.format(sorted(L,key=order_by_name)))print('byGrade排序结果:{}'.format(sorted(L,key=order_by_score,reverse=True)))执行结果:默认排序结果:[('Adam',92),('Bart',66),('Bob',75),('Lisa',88)]按名称排序结果:[('Adam',92),('Bart',66),('Bob',75),('Lisa',88)]按等级对结果进行排序:[('Adam',92),('Lisa',88),('Bob',75),('Bart',66)]