在Python中对字符串列表排序,使特定字符串优先出现

9 投票
3 回答
5386 浏览
提问于 2025-04-18 02:51

我刚开始学习Python,希望有人能帮我解决一个问题。我需要对一个字符串列表进行排序:

s = ['status', 'value', 'place', 'tag']

我希望排序后的列表看起来像这样:

s_sorted = ['tag', 'place', 'status', 'value']

换句话说,特定的字符串 'tag' 需要始终排在最前面,而其他的字符串则要进行排序。我试着想出一个比较器来实现这个功能,但到目前为止还没有成功。如果有人有解决类似问题的经验,我会很感激你能分享一些想法。

3 个回答

1

简单的方法怎么样呢?

first_item = 'tag'
s.pop(s.index(first_item))
s.sort()
s.insert(0, first_item)

假设 first_item 在目标列表中只出现一次,那么上面的做法就可以用了。

5

你可以这样做:

>>> s = ['status', 'value', 'place', 'tag']
>>> s.sort(key=lambda x: (x != 'tag', x))
>>> s
['tag', 'place', 'status', 'value']

这里我们要比较的是包含布尔值和项目本身的元组。对于 'tag',布尔值会是 False,所以它总是会排在最前面。其他的值的布尔值都是 True,在Python中,True 的值大于 False

13
s = ['status', 'value', 'place', 'tag']
s_sorted = sorted(s, key=lambda x:(x!='tag', x))

这个 key 会生成一个元组,元组的第一个元素是一个布尔值,用来判断这个元素是不是 'tag'。接着 sort 会根据第一个元素来排序,如果第一个元素是 False,那么这个元素会排在前面,因为 False 的优先级比 True 高。所以 tag 总是会排在最前面。

对于其他不等于 'tag' 的元素,排序会根据元组的第二个元素来进行,也就是对值本身进行字典序排序。


根据 sorted文档

key 是一个函数,它有一个参数,用来从每个列表元素中提取出一个比较的关键字,比如 key=str.lower。默认值是 None,这意味着直接比较元素。

撰写回答