文章目录
对list类型对象排序
sorted
排序不会改变被排序对象的原始顺序,排序后的对象会以返回值形式输出
li = [9, 4, 5, 6, 2, 1, 3, 7, 8]
# sorted :return a new list
s_li = sorted(li)
print("sorted li\t", s_li)
print("origin li\t", li)
sorted li [1, 2, 3, 4, 5, 6, 7, 8, 9]
origin li [9, 4, 5, 6, 2, 1, 3, 7, 8]
list.sort()
list的内置方法,其他类型的变量无法使用。排序可以直接改变调用者本身的元素顺序
# 不用新建一个变量,直接改变list本身
li.sort() # return a None
print("list_sorted\t", li)
list_sorted [1, 2, 3, 4, 5, 6, 7, 8, 9]
reverse=True
list.sort 和 sorted函数都可以使用这个参数
# reverse = True
print("reverserd li\t", sorted(li, reverse=True))
reverserd li [9, 8, 7, 6, 5, 4, 3, 2, 1]
对tuple和dict对象排序
对dict进行排序,默认是按照dict的key值进行排序
# tup
tup = [9, 4, 5, 6, 2, 1, 3, 7, 8]
print("tup\t",sorted(tup))
tup [1, 2, 3, 4, 5, 6, 7, 8, 9]
di = {"name": "cale", "job": "programming", "age": "none", "os": "mAC",}
s_di = sorted(di)
print("默认排序Dict\t",s_di)
def get_value(dii):
retlist=[]
for key, value in dii.items():
retlist.append(value)
return retlist
s_di_value = sorted(get_value(di))
print("以value值排序",s_di_value)
默认排序Dict ['age', 'job', 'name', 'os']
以value值排序 ['cale', 'mAC', 'none', 'programming']
参数key=
key=abs
# 接下来的视频将会使用sorted函数,基于其他类型的变量
li2= [-6, -5, -4, 1, 2, 3]
s_li2 = sorted(li2)
print(s_li2) # 整数排序
s_li3 = sorted(li2, key=abs)
print(s_li3)
[-6, -5, -4, 1, 2, 3]
[1, 2, 3, -4, -5, -6]
key= 函数指针、lambda、attrgetter
class Employee():
def __init__(self,name,age,salary):
self.name = name
self.age = age
self.salary = salary
def __repr__(self):
return "({},{},${})".format(self.name,self.age,self.salary)
- lambda or 函数指针
e1 = Employee("Carl",37,7000)
e2 = Employee("Sarah",29,8000)
e3 = Employee("John",43,9000)
elist = [e1, e2, e3]
def e_sort(emp):
return emp.salary
s_elist = sorted(elist,key=lambda x:x.age) # key= lambda or e_sort
print(s_elist)
[Sarah,29,$8000, Carl,37,$7000, John,43,$9000]
- attrgetter
from operator import attrgetter
s_elist = sorted(elist,key=attrgetter("age"))
print(s_elist)
[Sarah,29,$8000, Carl,37,$7000, John,43,$9000]
引用
本文主要参考下列视频内容,翻译并亲测代码后形成此文,感谢视频作者的无私奉献!