sort方法:
1,sort()是对一个容器(列表)进行排序,无返回值,直接改变容器。
2,sort()能够运用key参数传入一个自定义的函数或者匿名函数(函数只能有一个参数)先对比较的元素进行某种操作,然后根据这个函数的返回值进行排序。
3,key的参数的函数只能是具有一个参数的函数。
内置sorted()函数:
1,sorted()可以对所有的可迭代对象进行排序,有返回值,返回一个按某种规则排序之后的列表。这个规则可以由自己定义。
2,解决了sort()方法第三点指出的不足,可以使用具有两个参数的自定义函数。
sort()方法的定义:
def sort(self, key=None, reverse=False): # real signature unknown; restored from __doc__ """ L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE* """ pass ''' key:用于为每个元素都生成一个比较大小的键,是排序的条件, 可以是:key=int(使用int()函数将元素转换成一个整数进行比较), key=len(使用len()函数计算每个元素的长度进行比较), key=lambda..(使用一个自定义的匿名函数对元素进行某种操作,根据返回值进行比较) reverse:表示是否反序,默认从小到大,默认为Flase ''' ##一个list调用sort方法后,对原list进行排序
sort()的使用:
1 >>> lst = [2,1,5,4,3] 2 >>> lst.sort() 3 >>> lst //无返回值直接改变列表 4 [1, 2, 3, 4, 5] 5 >>> lst.sort(reverse=True) //反序 6 >>> lst 7 [5, 4, 3, 2, 1] 8 >>>
>>> lst = ["ft","ttrgh","fafdfd","q","qwe"] >>> lst.sort() //默认对字符串的首字母进行排序 >>> lst ['fafdfd', 'ft', 'q', 'qwe', 'ttrgh'] >>> lst = ["ft","ttrgh","fafdfd","q","qwe"] >>> lst.sort(key=len) //使用len()函数计算元素的长度,然后根据长度进行排序 >>> lst ['q', 'ft', 'qwe', 'ttrgh', 'fafdfd']
>>> lst = ["ft","ttrgh","fafdfd","q","qwe"] >>> lst.sort(key = lambda x:x[-1]) //利用自定义的匿名函数使得根据元素中字符串的最后字符进行排序。 >>> lst ['fafdfd', 'qwe', 'ttrgh', 'q', 'ft'] >>>
>>> lst = ["ft","ttrgh","fafdfd","q","qwe"] >>> def my_sort(st): ... return st[-1] ... >>> lst.sort(key=my_sort) >>> lst ['fafdfd', 'qwe', 'ttrgh', 'q', 'ft'] >>>
sorted()的定义:
def sorted(*args, **kwargs): # real signature unknown """ Return a new list containing all items from the iterable in ascending order. A custom key function can be supplied to customize the sort order, and the reverse flag can be set to request the result in descending order. """ ''' sorted()适用于任何可迭代容器,list.sort()仅支持list(本身就是list的一个方法) '''
sorted(iterable, cmp=None, key=None, reverse=False) ''' 参数说明: iterable -- 可迭代对象。 cmp -- 比较的函数(自定义函数),这个自定义函数具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。 key -- 比较函数和sort()的key参数类似,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。 reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。 '''python3中有做修改,取消了cmp参数:
sorted(iterable, key=None, reverse=False)'''iterable -- 可迭代对象。key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。'''
此时如果还需要使用自定义的比较函数,(注意:此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。)
,那么可以使用cmp_to_key函数。将老式的比较函数(comparison function)转化为关键字函数(key function)。与接受key function的工具一同使用(如 sorted(), min(), max(), heapq.nlargest(), itertools.groupby())。该函数主要用来将程序转成 Python 3 格式的,因为 Python 3 中不支持比较函数。
sorted()的使用:
def custom_sorted(x,y): if x>y: return -1 if x<y: return 1 return 0 print(sorted([2,3,1,5,4],key=cmp_to_key(custom_sorted)))
python之自定义排序函数sorted():https://www.cnblogs.com/xuxianshen/p/10257380.html
来源:https://www.cnblogs.com/xuxianshen/p/12380169.html