Python 使用 sorted 自定义对一维、二维数组进行排序
list = sorted(iterable, key=None, reverse=False)
iterable 表示指定的序列,key 参数可以自定义排序规则;reverse 参数指定以升序(False,默认)进行排序。
一维数组
arr = ['15:30', '16:30', '10:00', '8:00', '9:00', '13:30', '14:30', '11:00']
# 使用lamda自定义规则进行排序
sort_arr = sorted(arr, key=lambda x: int(x.split(':')[0]*60)+int(x.split(':')[1]))
print(sort_arr)
输出
['8:00', '9:00', '10:00', '11:00', '13:30', '14:30', '15:30', '16:30']
二维数组
weekday = ['星期一', '星期二', '星期三', '星期四', '星期五']
arr = [['星期一', '8:00', '8:45', '语文'], ['星期二', '10:00', '10:45', '生物'],
['星期二', '11:00', '11:45', '化学'], ['星期五', '11:00', '11:45', '化学'],
['星期一', '9:00', '9:45', '数学'], ['星期一', '10:00', '10:45', '英语'],
['星期一', '11:00', '11:45', '化学'], ['星期三', '13:30', '14:15', '语文'],
['星期四', '10:00', '10:45', '物理'], ['星期三', '8:00', '8:45', '物理'],
['星期三', '9:00', '9:45', '生物'], ['星期三', '10:00', '10:45', '英语']]
# 排序 一维按照weekday index升序,二维将数据转换为数字如 8:00 => 8*60+00=480 后再升序排序)
arr_sort = sorted(arr, key=lambda x: (weekday.index(x[0]), int(x[1].split(':')[0])*60+int(x[1].split(':')[1])))
for val in arr_sort:
print(val)
输出 : 一维按照weekday index升序,二维将数据转换为数字如 8:00 => 8*60+00=480 后再升序排序
['星期一', '8:00', '8:45', '语文']
['星期一', '9:00', '9:45', '数学']
['星期一', '10:00', '10:45', '英语']
['星期一', '11:00', '11:45', '化学']
['星期二', '10:00', '10:45', '生物']
['星期二', '11:00', '11:45', '化学']
['星期三', '8:00', '8:45', '物理']
['星期三', '9:00', '9:45', '生物']
['星期三', '10:00', '10:45', '英语']
['星期三', '13:30', '14:15', '语文']
['星期四', '10:00', '10:45', '物理']
['星期五', '11:00', '11:45', '化学']