Python:列表排序
list1 = [1, 2, 3, 6, 7, 2, 1, 11, 77, 3, 4]
list2 = ['1', '2', '11', '10']
list3 = ['zoo', '10', 'cat', 'blue', 'air']
升序排序
# 列表.sort() == list.sort(列表)
list.sort(list1)
print(list1)
list2.sort()
print(list2)
list3.sort()
print(list3)
[1, 1, 2, 2, 3, 3, 4, 6, 7, 11, 77]
['1', '10', '11', '2']
['10', 'air', 'blue', 'cat', 'zoo']
降序排序
list1.sort(reverse=True)
print(list1)
list2.sort(reverse=True)
print(list2)
list3.sort(reverse=True)
print(list3)
[77, 11, 7, 6, 4, 3, 3, 2, 2, 1, 1]
['2', '11', '10', '1']
['zoo', 'cat', 'blue', 'air', '10']
逆序,反转
list1.reverse()
print(list1)
print(list1[::-1])
print(list1)
[1, 1, 2, 2, 3, 3, 4, 6, 7, 11, 77]
[77, 11, 7, 6, 4, 3, 3, 2, 2, 1, 1]
[1, 1, 2, 2, 3, 3, 4, 6, 7, 11, 77]
列表.reverse()和list1[::-1]的区别:
1、list1.reverse()直接对list1的顺序做改变;
2、list1[::-1]不对list1产生影响,复制了一个新的列表,需要赋值给一个新的变量;
思考:
问题一: 我们发现list2的升序排序是[‘1’, ‘10’, ‘11’, ‘2’],如果升序的时候想要得到[‘1’, ‘2’, ‘10’, ‘11’]应该怎么做呢?
即python将列表内得字符串按照数字大小排序
# 将list2按照数字大小排序
list2.sort(key=int)
print(list2)
['1', '2', '10', '11']
问题二: 如果有以下列表,需要按照正确的序号排序,请问该怎么办呢
list5 = ['1、外交部召见欧盟驻华代表团团长', '7、回京升副部后 前央视名嘴再赴地方', '11、TVB老戏骨廖启智患胃癌', '2、西方倒行逆施阻挡不了中国前进',
'12、三星堆4号坑年代区间属于商代晚期', '3、31省份新增确诊9例 均为境外输入', '4、百度回港上市', '5、人民日报评校内减负校外增负',
'9、核酸检测等信息将整合入健康码', '6、白宫:希望与中国加强直接对话', '10、张京临场翻译高能时刻', '8、台官员被问是不是祈雨前没沐浴']
用刚刚的list.sort(key=int)显然不行了;需要找到其他办法
import re
list5.sort(key=lambda x: int(re.findall(r"\d+", x)[0]))
print(list5)
['1、外交部召见欧盟驻华代表团团长', '2、西方倒行逆施阻挡不了中国前进', '3、31省份新增确诊9例 均为境外输入', '4、百度回港上市', '5、人民日报评校内减负校外增负', '6、白宫:希望与中国加强直接对话', '7、回京升副部后 前央视名嘴再赴地方', '8、台官员被问是不是祈雨前没沐浴', '9、核酸检测等信息将整合入健康码', '10、张京临场翻译高能时刻', '11、TVB老戏骨廖启智患胃癌', '12、三星堆4号坑年代区间属于商代晚期']
lambda可以看成一个函数,如:
def a(x):
return int(re.findall(r"\d+", x)[0])
那么入参就是通过正则表达式找到的每个元素的首个数字(\d+),加号表示任意位数;通过首个数字排序;
拓展一:
height_data = [
{"name": "anna", "height": 171},
{"name": "luna", "height": 169},
{"name": "bob", "height": 164},
{"name": "coo", "height": 183},
{"name": "lina", "height": 178},
]
height_data.sort(key=lambda x: x["height"])
print(height_data)
# 降序排序
height_data.sort(key=lambda x: x["height"],reverse=True)
print(height_data)
[{'name': 'ken', 'height': 164}, {'name': 'jon', 'height': 169}, {'name': 'bob', 'height': 171}, {'name': 'ann', 'height': 178}, {'name': 'yun', 'height': 183}]
[{'name': 'coo', 'height': 183}, {'name': 'lina', 'height': 178}, {'name': 'anna', 'height': 171}, {'name': 'luna', 'height': 169}, {'name': 'bob', 'height': 164}]
拓展二:
# 按照数字排序
string_data = 'avg-123-sss, vgv-345-olp, kij-113-sfc, lok-012-njh'
list_data = string_data.split(',')
list_data.sort(key=lambda x: int(re.findall(r'\d+', x)[0]))
a = ','.join(list_data)
print(a)
lok-012-njh, kij-113-sfc,avg-123-sss, vgv-345-olp