python中列表、元组及字典的排序

0 序言

首先介绍,在Python排序中,常用的两个排序函数是sort()和sorted()。在讲列表、元组和字典的排序之前,有必介绍这两个函数。下面基于Python3,查看该函数的参数值。(Python2和Pyhton3对这两函数的参数设置有所差别)

在Python中查看内置函数和查看函数的属性、参数方法为:

#dir(__builtins__)
#调用查看Python中所有的内置函数
#纯小写的均是内部函数,若是想要知道某个函数的具体意思可以用help,例如:>>> help(input)
help(sorted)
help(list.sort)

(1)help(sorted)

这里写图片描述

(2)help(list.sort)

这里写图片描述
1、sort是容器的函数:sort( key=None, reverse=False)
2、sorted是python的内建函数:sorted(iterable, key=None, reverse=False)

参数解析:
* key:用列表元素的某个属性或函数作为关键字。
* reverse:排序规则,可以选择True或者False。
* sorted多一个参数iterable:待排序的可迭代类型的容器
* reverse=False,表示升序排序,in ascending order,默认首元素排序;reverse=True,表示降序排序,in descending order。

(3)注意:python2和python3的区别

来看python2中对函数的参数解释:
这里写图片描述
* 可以看出,在python2中,sorted()函数有cmp参数,在排序中通常使用cmp参数和key参数。鉴于python3中去除了cmp参数,为避免版本兼容问题,建议今后排序尽量不用cmp。

1 列表的排序

(1)列表元素为数值

a=[1,2,5,3,9,4,6,8,7,0,12]
a.sort()
print(a)
输出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]
b=[1,2,5,3,9,4,6,8,7,0,12]
print(sorted(b))
输出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12]

print(b)
输出:[1, 2, 5, 3, 9, 4, 6, 8, 7, 0, 12]

区别:
* 对于一个无序的列表a,调用a.sort(),对a进行排序后返回a,sort()函数修改待排序的列表内容。
* 而对于同样一个无序的列表b,调用sorted(b),对b进行排序后返回一个新的列表,而对b不产生影响。

总结:sort()函数是对原列表进行排序,sorted()函数是产生新的列表进行排序。

(2)列表元素为元组

list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
list1.sort()
print(list1)
输出:[(2, 'Mike', 22), (5, 'Lucy', 19), (8, 'Logan', 20)]
list1=[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
print(sorted(list1))
输出:[(2, 'Mike', 22), (5, 'Lucy', 19), (8, 'Logan', 20)]

print(list1)
输出:[(8, 'Logan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]

总结:在默认排序下,列表元素会根据列表中的第一个元素进行排序即list[0]或者tuple[0]。

(3)通过key函数进行自定义排序(以sorted()为例)

  • 其一:升降序

通过使用lambda表达式:以任意顺序进行排序。关于lambda表达式的介绍,文末详述。

list1=[(8, 'Zogan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
print(sorted(list1,key=lambda x:x[0]))
#输出:[(2, 'Mike', 22), (5, 'Lucy', 19), (8, 'Zogan', 20)]
print(sorted(list1,key=lambda x:x[1]))
#输出:[(5, 'Lucy', 19), (2, 'Mike', 22), (8, 'Zogan', 20)]
print(sorted(list1,key=lambda x:x[2]))
#输出:[(5, 'Lucy', 19), (8, 'Zogan', 20), (2, 'Mike', 22)]

备注:通过reverse函数设置True或False,只是实现升降序排序。

  • 其二:自定义排序规则(根据列表内元素长度排序)
L = [{1:5,3:4},{1:3,6:3},{1:1,2:4,5:6},{1:9}]
def f(x):
    return len(x)
L.sort(key=f)
print (L)

#输出:[{1: 9}, {1: 5, 3: 4}, {1: 3, 6: 3}, {1: 1, 2: 4, 5: 6}]

(4)调用operator库实现:加速、多级排序

  • 调用operator库中的itemgetter函数实现:排序加速
from operator import itemgetter
list1=[(8, 'Zogan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
print(sorted(list1,key=itemgetter(0)))
#输出:[(2, 'Mike', 22), (5, 'Lucy', 19), (8, 'Zogan', 20)]
print(sorted(list1,key=itemgetter(1)))
#输出:[(5, 'Lucy', 19), (2, 'Mike', 22), (8, 'Zogan', 20)]
print(sorted(list1,key=itemgetter(2)))
#输出:[(5, 'Lucy', 19), (8, 'Zogan', 20), (2, 'Mike', 22)]
  • 调用operator库中的itemgetter函数实现:多级排序
from operator import itemgetter
list1=[(8, 'Zogan', 20), (2, 'Mike', 22), (5, 'Lucy', 19)]
print(sorted(list1,key=itemgetter(0,2)))
#输出:[(2, 'Mike', 22), (5, 'Lucy', 19), (8, 'Zogan', 20)]

注释:
(1)第一级排序:通过[0]元素排序
(2)第二级排序:经过第一级排序后,再通过[2]进行排序。

2 python的字典

(1)字典的总体介绍

在Python中,字典是一系列键值对,即每个键都与一个值相关联,可以使用键来访问与之关联的值,不像列表的下标,字典的索引是可以使用许多不同数据类型的。(与键相关联的值可以是数字、字符串、列表乃至字典,事实上,可将任何python的对象作为字典中的值。

即:
* 字典放入列表中:作为列表的元素
* 列表放入字典中:作为字典的值
* 字典放入字典中:作为字典的值

(2)遍历字典的三个方法

  • items()方法:返回一个列表,内部含有键值对的元组。
#result是一个字典
result.items()=[('安徽', 53), ('广东', 155), ('陕西', 4)]
  • keys()方法:返回仅包含键的列表。
  • values()方法:返回仅包含值的列表。

可以用这三个方法来帮助for循环迭代字典中的每个值。

(3)对由字典排序 ,返回由tuple组成的List,不再是字典。

#intems()返回的是存储在列表中的元组。
#利用key = lambda x:x[1],按照元组的第二个元素进行降序排序
results = sorted(result.items(),key = lambda x:x[1],reverse = True)
print(results)

3 补充知识点:lambda表达式

(1)初步介绍
在Python中,lambda的语法是唯一的。其形式如下:

 lambda argument_list: expression
  • 其中,lambda是Python预留的关键字,argument_list和expression由用户自定义。
  • 这里的argument_list是参数列表
  • expression是一个关于参数的表达式。表达式中出现的参数需要在argument_list中有定义,并且表达式只能是单行的。

(2)简单使用

lambda x, y: x*y;

函数输入是x和y,输出是它们的积x*y

(3)其他使用情况
* filter函数。

此时lambda函数用于指定过滤列表元素的条件。例如:

filter(lambda x: x % 3 == 0, [1, 2, 3])

指定将列表[1,2,3]中能够被3整除的元素过滤出来,其结果是[3]。
* sorted函数。

此时lambda函数用于指定对列表中所有元素进行排序的准则。例如:

sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))

将列表[1, 2, 3, 4, 5, 6, 7, 8, 9]按照元素与5距离从小到大进行排序,其结果是[5, 4, 6, 3, 7, 2, 8, 1, 9]。
* map函数。

此时lambda函数用于指定对列表中每一个元素的共同操作。例如:

map(lambda x: x+1, [1, 2,3])

将列表[1, 2, 3]中的元素分别加1,其结果[2, 3, 4]。

注:关于lambda表达式的更多,参看:https://blog.csdn.net/zjuxsl/article/details/79437563

猜你喜欢

转载自blog.csdn.net/Kyrie001/article/details/82528011