Python【三十二】sort

参考:Python List sort()方法

一、介绍

1. 作用:

对列表的对象进行排序没有返回值


2. sort()方法语法:

list.sort(cmp=None, key=None, reverse=False)

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

二、key参数的应用

通过指定列表中的元素排序来输出列表

(一)key用方法表示

1. 要排序的列表类型是:list(int)

结果是对list中的元素按照升序进行排序

# 列表
random = [9, 2, 3, 4, 4, 1]

# 获取列表的元素
def takeSecond(elem):
    ele = elem
    print(f"elem={elem},ele={ele}")
    return ele

print(f"random的类型={type(random)}, random中元素的类型={type(random[0])}")
print(f'排序前的列表:{random}')
# 对列表中元素排序
random.sort(key=takeSecond)
# 输出类别
print(f'排序后的列表:{random}')
random的类型=<class 'list'>, random中元素的类型=<class 'int'>
排序前的列表:[9, 2, 3, 4, 4, 1]
elem=9,ele=9
elem=2,ele=2
elem=3,ele=3
elem=4,ele=4
elem=4,ele=4
elem=1,ele=1
排序后的列表:[1, 2, 3, 4, 4, 9]



2. 要排序的列表类型是:list(tuple(int))

结果是对list中tuple中的元素按照升序进行排序

将上面的random改一个类型,结果是

random = [(9, 2), (3, 4), (4, 1), (1, 3)]
random的类型=<class 'list'>, random中元素的类型=<class 'tuple'>
排序前的列表:[(9, 2), (3, 4), (4, 1), (1, 3)]
elem=(9, 2),ele=(9, 2)
elem=(3, 4),ele=(3, 4)
elem=(4, 1),ele=(4, 1)
elem=(1, 3),ele=(1, 3)
排序后的列表:[(1, 3), (3, 4), (4, 1), (9, 2)]

3.对排序方法做进一步操作

结果是对(list中tuple中的第二个元素)按照升序进行排序

# 列表
random = [(9, 2), (3, 4), (4, 1), (1, 3)]

# 获取列表的第二个元素
def takeSecond(elem):
    ele = elem[1]
    print(f"elem={elem},ele={ele}")
    return ele
random的类型=<class 'list'>, random中元素的类型=<class 'tuple'>
排序前的列表:[(9, 2), (3, 4), (4, 1), (1, 3)]
elem=(9, 2),ele=2
elem=(3, 4),ele=4
elem=(4, 1),ele=1
elem=(1, 3),ele=3
排序后的列表:[(4, 1), (9, 2), (1, 3), (3, 4)]

 (二)key用lambda表示

1. 例子

pred_spans.sort(key=lambda x: x[0])

# 列表
pred_spans = eval("[(3, 6, '身高体重时间'), (15, 17, '体重'), (1, 3, '身高体重日期'), (30, 33, '身高'), (18, 20, '身高体重日期')]")

print(f"pred_spans的类型={type(pred_spans)}, pred_spans中元素的类型={type(pred_spans[0])}, pred_spans中元素的类型={type(pred_spans[0][2])}")
print(f'排序前的列表:{pred_spans}')
# 对列表排序
pred_spans.sort(key=lambda x: x[0])
# 输出类别
print(f'排序后的列表:{pred_spans}')
pred_spans的类型=<class 'list'>, pred_spans中元素的类型=<class 'tuple'>, pred_spans中元素的类型=<class 'str'>
排序前的列表:[(3, 6, '身高体重时间'), (15, 17, '体重'), (1, 3, '身高体重日期'), (30, 33, '身高'), (18, 20, '身高体重日期')]
排序后的列表:[(1, 3, '身高体重日期'), (3, 6, '身高体重时间'), (15, 17, '体重'), (18, 20, '身高体重日期'), (30, 33, '身高')]

2. 将句子更长的放在前面

sentence_list = [
    "确诊弥漫大b细胞淋巴瘤1年",
    "反复咳嗽、咳痰40年,再发伴气促5天。",
    "生长发育迟缓9年。",
    "右侧小细胞肺癌第三次化疗入院",
    "反复气促、心悸10年,加重伴胸痛3天。",
    "反复胸闷、心悸、气促2多月,加重3天",
    "咳嗽、胸闷1月余, 加重1周",
    "右上肢无力3年, 加重伴肌肉萎缩半年"]
# 字符串按照逆序进行排序【将句子更长的放在前面】
sentence_list.sort(key=lambda c:len(c), reverse=True)

sentence_list打印结果: 

['反复咳嗽、咳痰40年,再发伴气促5天。', '反复气促、心悸10年,加重伴胸痛3天。', '反复胸闷、心悸、气促2多月,加重3天', '右上肢无力3年, 加重伴肌肉萎缩半年', '右侧小细胞肺癌第三次化疗入院', '咳嗽、胸闷1月余, 加重1周', '确诊弥漫大b细胞淋巴瘤1年', '生长发育迟缓9年。']

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值