在Python中对字符串列表排序,使特定字符串优先出现
我刚开始学习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
,这意味着直接比较元素。