一、拓展py:方法和函数拓展 sort sorted

python方法和函数拓展 sort sorted

1.sort 与 sorted的区别

sort是对列表本身进行永久性的排序。

sorted则会返回一个排序之后的列表,不会对列表本身进行修改。

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

list = [3,1,2]
list.sort()
print(list)#[1, 2, 3]
list = [3,1,2]
new_list = sorted(list)
print(new_list)#[1, 2, 3]

2.sort

2.1参数

list.sort(cmp=None, key=None, reverse=False)
  • cmp – 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
  • key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。

2.2key参数的应用

根据列表中指定的元素进行排序

list = [[1,3],[12,1],[32,2]]
#定义一个取第二个元素的函数
def takesecond(item):
    return item[1]
#循环列表中的每一个元素,并且根据元素中的第二个元素进行排序。
list.sort(key=takesecond)
print(list)#[[12, 1], [32, 2], [1, 3]]
list = [[1,3],[12,1],[32,2]]
#定义了一个匿名函数,参数x,返回x中的第二个元素
#key 指定了根据x的第二个元素进行排序
list.sort(key=lambda x:x[1])
print(list)#[[12, 1], [32, 2], [1, 3]]

key会把列表的元素作为参数传入后面的函数,然后把函数的返回值作为排序的依据。

2.2.1扩展

如果key接受了两个返回值,那么第一个返回值就会是首要排序依据,如果第一个返回值相等,那么会根据第二个返回值进行排序。

list = [[1,3],[12,1],[32,2],[31,2]]
#定义了一个匿名函数,返回第一个元素和第二个元素
#key就会让x[1]成为首要排序依据,另一个成为次要依据
list.sort(key=lambda x:(x[1],x[0]))
print(list)#[[12, 1], [31, 2], [32, 2], [1, 3]]

2.3reverse参数的应用

reverse = True 降序, reverse = False 升序(默认)。

list = [[1,3],[12,1],[32,2],[31,2]]
#设置为降序,从大到小。
list.sort(key=lambda x:(x[1],x[0]),reverse=True)
print(list)#[[1, 3], [32, 2], [31, 2], [12, 1]]

3.sorted

3.1参数

sorted(iterable, cmp=None, key=None, reverse=False)
  • iterable – 可迭代对象。
  • cmp – 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
  • key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

3.2对key参数的应用

按value值对字典排序

d = {"a":3,"b":1,"c":2}
#指定迭代对象是字典中的每一个键值对
#将键值对作为参数传入匿名函数,返回值,将value作为排序的标准
print(sorted(d.items(),key=lambda item:item[1]))
#[('b', 1), ('c', 2), ('a', 3)]

3.3对cmp参数的使用(效率key>cmp)

发现在py3中取消了cmp参数,那就不写啦!

3.4reverse

和上面的一样的

4.应用扩展

输入名字(英文),名字在前面形式在后面中间用空格分离,要求根据姓氏排序,姓氏首字母一样就用名字排序,然后输出一个列表,每一个元素装一个名字。


sName=input("输入名字,名前后姓,quit退出") or "quit"
a=[]
while sName!="quit":
    a.append(sName)
    sName=input() or "quit"
# 把名字和姓氏组成一个列表嵌套进一个列表中
Allname=[x.split() for x in a]
#排序
Allname.sort(key=lambda x:(x[1],x[0]))
final=[]
#把嵌套的列表转换回来
for x in range(len(Allname)):
    final.append(" ".join(y for y in Allname[x]))
print(final)

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。后续可能会有评论区,不过也可以在github联系我。