python3 语法小记(一)sort函数 sorted函数

联系:

都是排序方法

区别:

1、sort函数是应用到list上的,属于列表的成员方法,sorted可以对所有的可迭代对象进行排序操作。

2、list的sort方法返回的是对已经存在的列表进行操作,无返回值;而内建函数sorted返回的是一个新的列表,不是在原来的基础上进行操作。

3、sort的使用方法是list.sort(),sorted的使用方法是sorted(list)。 

语法:

1、sort语法

原型:list.sort(fun, key=None, reverse=Flase)

(1) 参数fun是表明此sort函数是基于何种算法进行排序的,一般默认情况下python中用的是归并排序,并且一般情况下我们是不会重写此参数的,所以基本可以忽略;

(2) 参数key用来指定一个函数,此函数在每次元素比较时被调用,此函数代表排序的规则,也就是你按照什么规则对你的序列进行排序;一般用lambda函数指定。

(3) 参数reverse指定排序规则,reverse=True(升序),reverse=Flase(降序),默认降序。

举例:

ls = list([('wo',1,9),('shi',2,6),('guo',3,7),('yang',4,5)])

#使用默认参数进行排序,即按照元祖第一个元素进行排序(默认升序)
ls.sort()
print(ls)
[('guo', 3, 7), ('shi', 2, 6), ('wo', 1, 9), ('yang', 4, 5)]

#降序情况
ls.sort(reverse=True)
print(ls)
[('yang', 4, 5), ('wo', 1, 9), ('shi', 2, 6), ('guo', 3, 7)]

#使用匿名函数lambda重写key,按照元祖的第二个元素进行排序
ls.sort(key=lambda x :(x[1]))
print(ls)
[('wo', 1, 9), ('shi', 2, 6), ('guo', 3, 7), ('yang', 4, 5)]

#使用匿名函数重写key所代表的函数,先按照元组中下标为1的进行排序,
#对于下标2处元素相同的,则按下标为0处的元素进行排序
ls.sort(key=lambda x :(x[1],x[0]))
print(ls)
[('wo', 1, 9), ('shi', 2, 6), ('guo', 3, 7), ('yang', 4, 5)]

2、sorted语法

原型:sorted(iterable, key=None, reverse=Flase)

(1) 参数iterable是可迭代对象 

(2) 参数key用来指定一个函数,此函数在每次元素比较时被调用,此函数代表排序的规则,也就是你按照什么规则对你的序列进行排序;一般用lambda函数指定。

(3) 参数reverse指定排序规则,reverse=True(升序),reverse=Flase(降序),默认降序。

说明:sort只能对列表进行排序,而sorted可以对任何可迭代对象进行排序

字典:

1、按照key值排序

dic = {1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'}
sorted(dic) #默认直接对字典的键进行排序
[1, 2, 3, 4, 5]

#也可以这样,结果一样
sorted(dic.keys())
[1, 2, 3, 4, 5]

2、按照value排序

dic = {1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'}
sorted(dic.items(), key=lambda x : (x[1]))
[(5, 'A'), (2, 'B'), (3, 'B'), (1, 'D'), (4, 'E')]

items()实际上是将dic转换成可迭代的对象(即元组),为[(1,'D'),(2,'B'),(3,'B'),(4,'E'),(5,'A')] ,items()方法将字典的元素转成了元组。注意排序后的返回值是一个list,而原字典中的名值对被转换为了list中的元组。

lis = [{"age":20,"name":"a"},{"age":25,"name":"b"},{"age":10,"name":"c"}]
sorted(lis, key=lambda x :(x['age']))
[{'age': 10, 'name': 'c'}, {'age': 20, 'name': 'a'}, {'age': 25, 'name': 'b'}]

猜你喜欢

转载自blog.csdn.net/guoyang768/article/details/84428171