在python中对字符串列表进行排序,以便首先显示特定的字符串(如果存在)
我是python新手,希望有人能帮我解决这个问题。我需要对字符串列表进行排序:在python中对字符串列表进行排序,以便首先显示特定的字符串(如果存在),python,list,sorting,Python,List,Sorting,我是python新手,希望有人能帮我解决这个问题。我需要对字符串列表进行排序: s = ['status', 'value', 'place', 'tag'] 我需要以这样的方式进行排序,排序后的列表如下所示: s_sorted = ['tag', 'place', 'status', 'value'] 按顺序排列单词时,特定字符串'tag'需要始终位于前面,其余字符串将被排序。我试着提出一个比较器,使我能够这样做。但到目前为止我还没能做到。如果有人有解决这类问题的经验,我希望你们能分享一些
s = ['status', 'value', 'place', 'tag']
我需要以这样的方式进行排序,排序后的列表如下所示:
s_sorted = ['tag', 'place', 'status', 'value']
按顺序排列单词时,特定字符串
'tag'
需要始终位于前面,其余字符串将被排序。我试着提出一个比较器,使我能够这样做。但到目前为止我还没能做到。如果有人有解决这类问题的经验,我希望你们能分享一些想法 您可以这样做:
>>> s = ['status', 'value', 'place', 'tag']
>>> s.sort(key=lambda x: (x != 'tag', x))
>>> s
['tag', 'place', 'status', 'value']
这里将比较包含布尔值的元组和项本身,对于'tag'
,布尔值将是False
,因此它将始终位于前面。在Python中,其余值的布尔值分别为True
,和True
False
s = ['status', 'value', 'place', 'tag']
s_sorted = sorted(s, key=lambda x:(x!='tag', x))
键
生成一个元组,如果元素不是“标记”
,则第一个元素为布尔值<代码>排序按第一个元素排序,然后按第二个元素排序。这样,tag
总是排在第一位,因为False
排序在True
之前
对于剩余的元素(不等于'tag'
),排序通常在第二个元组元素上进行,这是对值本身的字典式字符串排序
从排序的
中
:
key
指定一个参数的函数,该参数用于从每个列表元素提取比较键:key=str.lower
。默认值为None
(直接比较元素)
简单的方法怎么样
first_item = 'tag'
s.pop(s.index(first_item))
s.sort()
s.insert(0, first_item)
假设
第一个\u项在目标列表中只出现一次,上述操作将起作用。我们如何知道哪个是标记?它总是最后一个吗?不是真的。列表中的某个地方有一个特定的字符串。关于传递元组的键的文档在哪里?我找不到它。它在哪里说如果键
函数返回一个元组,它将首先按第一个元素进行比较,然后按第二个元素进行比较,依此类推?或者这不是它在做什么?@Two Bitalchest这里可能没有提到,但key返回的值用于比较,通常这就是元组/列表比较的工作方式。是的,就是这样。这就是元组的排序方式。类似于排序字符串首先按第一个字符排序,然后按第二个字符排序,依此类推。同样的机制。这是另一篇关于它的帖子:键函数返回一个元组用于排序,这很聪明。如果有多个“标记”字符串??虽然OP没有问。但是这种方法对我来说并不好。编辑:你已经提到我不读书了。