Sorting Lists, Tuples, and Objects

对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]

引用

本文主要参考下列视频内容,翻译并亲测代码后形成此文,感谢视频作者的无私奉献!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值