首先介绍,在Python排序中,常用的两个排序函数是sort()和sorted()。在讲列表、元组和字典的排序之前,有必介绍这两个函数。下面基于Python3,查看该函数的参数值。(Python2和Pyhton3对这两函数的参数设置有所差别)
在Python中查看内置函数和查看函数的属性、参数方法为:
#dir(__builtins__)
#调用查看Python中所有的内置函数
#纯小写的均是内部函数,若是想要知道某个函数的具体意思可以用help,例如:>>> help(input)
help(sorted)
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。
来看python2中对函数的参数解释:
* 可以看出,在python2中,sorted()函数有cmp参数,在排序中通常使用cmp参数和key参数。鉴于python3中去除了cmp参数,为避免版本兼容问题,建议今后排序尽量不用cmp。
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()函数是产生新的列表进行排序。
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]。
通过使用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}]
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)]
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]进行排序。
在Python中,字典是一系列键值对,即每个键都与一个值相关联,可以使用键来访问与之关联的值,不像列表的下标,字典的索引是可以使用许多不同数据类型的。(与键相关联的值可以是数字、字符串、列表乃至字典,事实上,可将任何python的对象作为字典中的值。)
即:
* 字典放入列表中:作为列表的元素
* 列表放入字典中:作为字典的值
* 字典放入字典中:作为字典的值
#result是一个字典
result.items()=[('安徽', 53), ('广东', 155), ('陕西', 4)]
可以用这三个方法来帮助for循环迭代字典中的每个值。
#intems()返回的是存储在列表中的元组。
#利用key = lambda x:x[1],按照元组的第二个元素进行降序排序
results = sorted(result.items(),key = lambda x:x[1],reverse = True)
print(results)
(1)初步介绍
在Python中,lambda的语法是唯一的。其形式如下:
lambda argument_list: expression
(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