在python中对一个字符串列表进行排序,如果存在一个特定的字符串,则首先出现。

问题描述 投票:5回答:3

我是python新手,希望有人能帮我解决这个问题。我需要对一个字符串列表进行排序。

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

我需要以这样的方式排序,排序后的列表看起来像这样。

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

按顺序的话,特定的字符串 'tag' 需要总是在前面,其余的字符串要进行排序。我是想想出一个比较器,让我能够做到这一点。但是到目前为止,我还没能做到这一点。如果有人有解决这样的问题的经验,如果你能分享一些想法,我会很感激。

python list sorting
3个回答
11
投票
s = ['status', 'value', 'place', 'tag']
s_sorted = sorted(s, key=lambda x:(x!='tag', x))

列表中的 key 生成一个元组,第一个元素是布尔值,如果该元素不是 'tag'. sort 按第一个元素排序,然后再按第二个元素排序。这样一来 tag 始终是第一位的,因为 False 前期 True.

在其余要素的情况下 - 不等于 'tag' - 排序通常是在第二个元组元素上进行,也就是在值本身上进行词法字符串排序。


sorted 文件:

key 指定一个参数的函数,用于从每个列表元素中提取比较键。key=str.lower. 默认值是 None 直接比较元素)。


5
投票

你可以做这样的事情。

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

这里要比较包含布尔值的图元组和项目本身,比如说 'tag' 布尔值将是 False,所以它总是在前面。其余的值将有布尔值,如 TrueTrue > False 在Python中。


0
投票

那么简单的方法呢?

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

假设 first_item 在目标列表中只出现一次,上述方法就可以了。

© www.soinside.com 2019 - 2024. All rights reserved.