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', '化学']