• Post author:
  • Post category:python
  • Post comments:0评论

官方文档: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 列)来进行排序。

发表评论

验证码: 31 − = 28