python里sort和sorted区别_(转)python3中sort和sorted的区别详解

版权声明:本文为CSDN博主「Vince Li」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_43250623/article/details/88829341

sort和sorted的区别

虽然python3中sort()和sorted()都可以用来排序,但二者有以下两个最主要的区别:

sort只能应用在列表list上,而sorted可以对所有可迭代的对象进行排序的操作

sort方法会在原list上直接进行排序,不会创建新的list。而sorted方法不会对原来的数据做任何改动,排序后的结果是新生成的。

如果我们不需要原来的数据而且数据是list类型,可以用sort方法,能够节省空间。否则要用sorted方法。

sort

在python3中有key和reverse两个可选参数。参数reverse指定排序是升序还是降序,默认是升序参数key指定了只含一个参数的方法,这个方法用来从列表的每个元素中提取比较键。可以看看下面几个例子:

1.通过元素长度排序

s_list = ["bbb","ccc","bac","ab","ba"]

s_list.sort(key=len) # key=len 指定排序规则按长度排序

print(s_list)

1

2

3

打印结果如下:

['ab', 'ba', 'bbb', 'ccc', 'bac']

1

2.通过元素的字符顺序

s_list = ["bbb","BBB","bAc","ab","bac"]

s_list.sort() # 默认升序

print(s_list)

s_list.sort(key=str.lower)  # 先小写再大写

print(s_list)

1

2

3

4

5

打印结果如下:

['BBB', 'ab', 'bAc', 'bac', 'bbb']

['ab', 'bAc', 'bac', 'BBB', 'bbb']

1

2

3.更复杂一点的排序:list里的元素是一个字典,通过字典的某个属性值排序。

下面是通过学生的年龄排序

student = [{"name": "小C", "age": 12, "score": 90},

{"name": "小D", "age": 13, "score": 84},

{"name": "小A", "age": 14, "score": 85},

{"name": "小E", "age": 15, "score": 89},

{"name": "小F", "age": 12, "score": 88}]

student.sort(key=lambda a: a["age"])

# 此方法是对list的元素进行排序,每一个元素是一个字典,按字典中的age进行排序,但不能直接对字典进行排序,sort的操作对象只能是list

print(student)

1

2

3

4

5

6

7

8

打印结果如下:

[{'name': '小C', 'age': 12, 'score': 90},

{'name': '小F', 'age': 12, 'score': 88},

{'name': '小D', 'age': 13, 'score': 84},

{'name': '小A', 'age': 14, 'score': 85},

{'name': '小E', 'age': 15, 'score': 89}]

1

2

3

4

5

由于sort只有list类型才可以用属于列表的成员方法,所以用的更普遍的是sorted方法,下面来说下sorted方法

注意:sort只有list类型才可以用

注意:sort只有list类型才可以用

注意:sort只有list类型才可以用

返回值

sort方法会在原list上直接进行排序,不会创建新的list,所以sort没有返回值或者说返回None

sorted

所有可迭代对象都可以用sorted来进行排序,排序不会改变原来的对象。sorted接收3个参数:

sorted一共有iterable, key, reverse这三个参数;

sorted(iterable, , key=None, reverse=False)

参数    作用

iterable    可迭代对象 , 例如: dict.items()、dict.keys()等

key    用来选取参与比较的元素, 例如确定是按照字典的键比较还是按照值进行比较

reverse    用来指定排序是升序还是降序,reverse=true是降序,false时则是升序,默认时是升序

看下面一个小例子:

s_tuples = [('john', 'A', 15),

('jane', 'B', 12),

('dave', 'B', 10)]

new_tuples = sorted(s_tuples , key=lambda student: student[2]) # student[2]表示按照列表中的元组中的第三个元素的大小进行排序

print(s_tuples )

print(new_tuples)

1

2

3

4

5

6

打印结果如下:

[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] # 原始的

[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] # 排序过的

1

2

新列表是通过年龄排序的,从打印结果可以看出没有改变原数据

这种含有key参数的方法使用十分普遍

2,对字典的值进行排序

a = { "b": 5, "c": 2,"a": 4, "d": 1}

#对字典按值(value)进行排序(默认由小到大)

test_2=sorted(a.items(),key=lambda x:x[1])

#输出结果

print(test_2)

1

2

3

4

5

打印结果为:

[('d', 1), ('c', 2), ('a', 4), ('b', 5)] # 对值进行了排序

1

返回值

sorted方法不会对原来的数据做任何改动,排序后的结果是新生成的。所以sorted会返回一个排序过的列表

————————————————

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值