sort()&sorted()

懵懂的女人 提交于 2020-02-06 07:17:09

列表的sort()和sorted()方法
sort()与sorted()的不同在于,sort是在原位重新排列列表,而sorted()是产生一个新的列表。

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

注:sorted不是列表方法。


1.sort()方法
sort函数的原型

  sort(key=None, reverse=False)

  key 可指定一些规则,可以是k=int, k =len , k=function函数

  reverse 默认值是False

  可以给它赋值成True,那就是反向排序
  简单的列表排序
 
l = [1,7,4,9,2,3,5,0,8,6]
l.sort()
print(l)
结果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 
#类表中嵌套其他数据类型,如字典
 
# a = [{'id':1,'name':'小明'},{'id':3,'name':'小红'},{'id':2,'name':'老王'}]
# 根据字典的key值id进行降序排序并输出排序后的列表。
 
def function(date):
    print(date)
    print(date['id'])
    return date['id']
a.sort(key=function)
print(a)
#结果:[{'id': 1, 'name': '小明'}, {'id': 2, 'name': '老王'}, {'id': 3, 'name': '小红'}]
 
 
##################简化版#################
 
a.sort(key=lambda keys: keys['id'])
print(a)
 
 
s = sorted(a, key=lambda keys: keys['id'])
print(s)

按照字符串排序

StrList = ['fb', 'bx', 'csw', 'qb', 'qqa', 'eeeed']
# 一般字典序排列,但是大写在前,小写在后!!
StrList.sort()
print(StrList) ##字符串列表是按照第一个字符的大小排序的
##输出:['Fast', 'Smooth', 'fast', 'is', 'is', 'smooth']
 
#忽略大小写,按abcd顺序
StrList.sort(key=str.lower)
print(StrList) ##输出:['Fast', 'fast', 'is', 'is', 'Smooth', 'smooth']
 
#按照字符串长度排序
StrList.sort(key=len)
print(StrList)##输出:['is', 'is', 'fast', 'Fast', 'Smooth', 'smooth']
 
StrList.sort(key=len, reverse=True)#反序
print(StrList) ##输出:['Smooth', 'smooth', 'fast', 'Fast', 'is', 'is']

2.sorted()方法
  返回一个新列表,其中包含按升序排列的iterable中的所有项。可以提供自定义键函数来自定义排序顺序,以及可以将反转标志设置为按降序请求结果。

sorted(L)返回一个排序后的L,不改变原始的L;

L.sort()是对原始的L进行操作,调用后原始的L会改变,没有返回值。【所以a = a.sort()是错的啦!a = sorted(a)才对!
sorted()适用于任何可迭代容器,list.sort()仅支持list(本身就是list的一个方法)

# a = [{'id':1,'name':'小明'},{'id':3,'name':'小红'},{'id':2,'name':'老王'}]
# 根据字典的key值id进行降序排序并输出排序后的列表。
 
a = [{'id':1,'name':'小明'},{'id':3,'name':'小红'},{'id':2,'name':'老王'}]
 
s=sorted(a, key=lambda keys: keys['id'])
print(s)
print(a)
 
对于同样一个无序的列表a,调用sorted(a),对a进行排序后返回一个新的列表,而对a不产生影响。
 
对于一个无序的列表a,调用a.sort(),对a进行排序后返回a,sort()函数修改待排序的列表内容。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!