一、介绍
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年。'] |