Python, 排序

1 投票
3 回答
2248 浏览
提问于 2025-04-16 03:57

这是一个用竖线分隔的数据列表,每一行都有一个名字和几个数字,格式如下:

名字|数字|数字|数字|数字
名字|数字|数字|数字|数字
名字|数字|数字|数字|数字

他想知道怎么根据特定的字段(比如第2、3、4、5个数字)来对这个列表进行排序。

抱歉我的英语不好。

更新

输入:

str|10|20
str|1|30

按第一个字段排序(1,10):

str|1|30
str|10|20

按第二个字段排序(20,30):

str|10|20
str|1|30

3 个回答

2

你可以根据一个特定的关键字来排序,这个关键字告诉排序函数如何评估要排序的条目,也就是说,我们是怎么决定两个条目哪个更大的。在这个例子中,我们首先用split把每个字符串按管道符号分开,比如"a|b|c".split("|")会返回["a", "b", "c"],然后再取出你想要的那个条目。

如果要根据第一个“num”字段进行排序,可以这样做:

sorted(lines, key=(lambda line : line.split("|")[1])

这里的lines是你在问题中提到的行的列表。如果想根据其他字段排序,只需更改括号中的数字即可。

3

我会使用操作模块中的“itemgetter”函数,而不是用lambda函数。这样做更快,而且可以进行多层次的排序。

from operator import itemgetter

data = (line.split('|') for line in input.split('\n')) 
sort_index = 1
sorted(data, key=itemgetter(sort_index))
1

假设你手上有一个字符串的列表,首先要把每一行拆分成一个列表:

data = [line.split('|') for line in input]

然后可以根据你想要的索引进行排序:

sort_index = 1
sorted_data = sorted(data, key=lambda line: int(line[sort_index]))

Python排序指南里有更多的信息。

撰写回答