官方文档:https://docs.python.org/3.8/howto/sorting.html#sortinghowto
需要排序的文件:
a b 87 77.85
c a 100 91
b c 90 77.77
python 代码:
#!/usr/bin/env python3
# Author: cp
import re
line_list = []
with open('test.txt','r') as f:
for line in f.readlines():
res_list = line.strip('\n').split(" ")
l_index = 0
for i in res_list:
if re.match('^[0-9]+$', i):
res_list[l_index] = int(i)
elif re.match('^[0-9]+(\.[0-9]+)?$', i):
res_list[l_index] = float(i)
l_index = l_index + 1
line_list.append(res_list)
sort_list = sorted(line_list, reverse=True, key=lambda x:x[3])
for i in sort_list:
for a in i:
print(a,end=" ")
print()
输出结果:
c a 100 91
a b 87 77.85
b c 90 77.77
整体流程:
• 读取文件行,将每行通过 split 方法按空格切片生成列表
• 正则判断区分整数和小数,重写列表元素类型。
• 将得到的 res_list 添加到 line_list 中。
• 使用 sorted 函数对列表进行排序。
说下 sorted 函数,用于从可迭代对象构建新的排序列表。
语法:sorted(__iterable, key, reverse)
参数:
• reverse: False 升序(默认),True 降序
• key:用来进行比较的元素,指定可迭代对象中的一个元素来进行排序。
解析下 sorted(line_list, reverse=True, key=lambda x:x[3])
这条代码。表示对 line_list 列表进行降序排序,key 参数指定使用 line_list 列表的每个元素(x)的索引 3(也就是第 3 列)来进行排序。