sort函数用法

Python2.x:list.sort(cmp=None, key=None, reverse=False)
 Python3.x:list.sort(key=None, reverse=False)


特点:对list原地排序(直接改变数组),无返回值,永久性性.python3取消了cmp参数。
参数:

cmp——可选参数, 可用于自定义排序规则。
key ——主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse——升序or降序,reverse = True 降序, reverse = False 升序(默认)。

sorted函数用法

python2.x:sorted(iterable, cmp=None, key=None, reverse=False) )
 python3.x:sorted(iterable, key=None, reverse=False) )


特点:可以对所有可迭代的对象进行排序操作。返回的是一个新的 list,不修改原来的对象。
参数:
iterable – 可迭代对象。
cmp – 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
python3.x取消了cmp可选参数
注意!!
1.sort无返回值,改变原来列表的值;
2.sorted不改变原来列表的值,返回新的列表
3.针对元组/字典/字符串只能使用sorted函数,不能使用sort;
4.sorted对字典/字符串操作返回一个list
***
实际应用
2.列表list
2.1 list为整数,reverse=True时为升序
#注意,元素均为数据

x = [4, 6, 2, 1, 7, 9]
y = [4, 6, 2, 1, 7, 9]
x.sort()
print(x)
x.sort(reverse=True)
print(x)
yy=sorted(y)
yyy=sorted(y,reverse=True)
print(y)
print(yy)
print(yyy
#输出,x序列已变更,但是y序列未变更,生成新的序列yy
[1, 2, 4, 6, 7, 9]
[9, 7, 6, 4, 2, 1]
[4, 6, 2, 1, 7, 9]
[1, 2, 4, 6, 7, 9]
[9, 7, 6, 4, 2, 1]

2.2 list为字符串
#注意:元素均为字符串,按照ASCII字符顺序

x.sort(key=lambda x:x[2],reverse=True)
print(x)
yy=sorted(y,key=lambda x:x[2],reverse=True)
print(yy)
#输出结果,如果key和reverse不携带,默认按照元素首字母升序排列
['antt', 'Istt', 'letters', 'With', 'cased', 'Hello', 'this', 'Example'] #按照元素的第3个字母降序排列
['antt', 'Istt', 'letters', 'With', 'cased', 'Hello', 'this', 'Example'] #按照元素的第3个字母降序排列

2.3 list元素为tumple
#元素均为tumple

x =[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
y = [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
x.sort(key=lambda x:x[2])
print(x)
yy=sorted(y,key=lambda x:x[2],reverse=True)
print(yy)
#按照tumple中的某个元素排序,如下年龄排序
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

2.4 list中为字典
#元素均为字典

x =[{'name0':'李丽','age':40}, {'name0':'张那','age':30},{'name0':'王原','age':50},{'name0':'王丽萍','age':50}]
y =[{'name0':'李丽','age':40}, {'name0':'张那','age':30},{'name0':'王原','age':50},{'name0':'王丽萍','age':50}]
x.sort(key=lambda x:x['age'])
print(x)
yy=sorted(y,key=lambda x:x['age'],reverse=True)
print(yy)
#可按照指定的key值排序,如下按照年龄
[{'name0': '张那', 'age': 30}, {'name0': '李丽', 'age': 40}, {'name0': '王原', 'age': 50}, {'name0': '王丽萍', 'age': 50}]
[{'name0': '王原', 'age': 50}, {'name0': '王丽萍', 'age': 50}, {'name0': '李丽', 'age': 40}, {'name0': '张那', 'age': 30}]

3 字典
#对字典排序,返回列表

dict1={1: 2, 2: 2, 3: 1, 4: 7, 5: 6, 6: 4, 7: 3, 8: 2, 9: 1}

d1=sorted(dict1.values(),reverse=True)#按values值进行排序
d2=sorted(dict1,reverse=True)          #默认为keys值排序
d3=sorted(dict1.keys(),reverse=True)  #按keys值进行排序
#输出
[7, 6, 4, 3, 2, 2, 2, 1, 1]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
[9, 8, 7, 6, 5, 4, 3, 2, 1]

4 元组

tumple=(1,3,2,5,1)
new=sorted(tumple)
print(new)
#输出
[1, 1, 2, 3, 5]

5 字符串
对字符串操作,返回列表

str="GYGFUIWBFBFWIjhnkln"
NEW=sorted(str)
print(NEW)
print(type(NEW))

扩展,不区分大小小排序:

ss="This is a test string from Andrew"
x=sorted(ss,key=str.lower)
y=sorted(ss,key=str.upper)
print(x)
print(y)
print(ss.upper())
#输出
[' ', ' ', ' ', ' ', ' ', ' ', 'a', 'A', 'd', 'e', 'e', 'f', 'g', 'h', 'i', 'i', 'i', 'm', 'n', 'n', 'o', 'r', 'r', 'r', 's', 's', 's', 's', 'T', 't', 't', 't', 'w']
[' ', ' ', ' ', ' ', ' ', ' ', 'a', 'A', 'd', 'e', 'e', 'f', 'g', 'h', 'i', 'i', 'i', 'm', 'n', 'n', 'o', 'r', 'r', 'r', 's', 's', 's', 's', 'T', 't', 't', 't', 'w']
THIS IS A TEST STRING FROM ANDREW