首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在python中对列表进行排序

在python中对列表进行排序
EN

Stack Overflow用户
提问于 2013-07-12 13:49:52
回答 4查看 1K关注 0票数 4

我的目标是对一个字符串列表进行排序,其中必须对单词进行排序alphabetically.Except以"s“开头的单词应该位于列表的开头(它们也应该进行排序),然后是其他单词。

下面的函数可以帮我做到这一点。

代码语言:javascript
运行
复制
def mysort(words):
    mylist1 = sorted([i for i in words if i[:1] == "s"])
    mylist2 = sorted([i for i in words if i[:1] != "s"])
    list = mylist1 + mylist2
    return list

我只是在寻找替代的方法来实现这一点,或者如果任何人可以发现上述代码的任何问题。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-12 13:59:02

您可以在一行代码中完成,如下所示:

代码语言:javascript
运行
复制
sorted(words, key=lambda x: 'a' + x if x.startswith('s') else 'b' + x)

sorted()函数接受一个关键字参数key,该参数用于在进行比较之前转换列表中的值。

例如:

代码语言:javascript
运行
复制
sorted(words, key=str.lower)
    # Will do a sort that ignores the case, since instead
    # of checking 'A' vs. 'b' it will check str.lower('A')
    # vs. str.lower('b').

sorted(intlist, key=abs)
    # Will sort a list of integers by magnitude, regardless
    # of whether they're negative or positive:
    # >>> sorted([-5,2,1,-8], key=abs)
    #     [1, 2, -5, -8]

我在进行排序时使用的翻译后的字符串如下:

代码语言:javascript
运行
复制
"hello" => "bhello"  
"steve" => "asteve"

因此在比较中"steve“应该在"hello”之前,因为比较是用a/b前缀完成的。

请注意,这只会影响用于比较的键,而不会影响排序出来的数据项。

票数 10
EN

Stack Overflow用户

发布于 2013-07-12 13:54:04

1.您可以在sorted中使用generator expression

2.您可以使用str.startswith

3.不要使用list作为变量名。

4.在排序中使用key=str.lower

代码语言:javascript
运行
复制
mylist1 = sorted((i for i in words if i.startswith(("s","S"))),key=str.lower)
mylist2 = sorted((i for i in words if not i.startswith(("s","S"))),key=str.lower)
return mylist1 + mylist2

为什么选择str.lower

代码语言:javascript
运行
复制
>>> "abc" > "BCD"
True
>>> "abc" > "BCD".lower()  #fair comparison
False
票数 5
EN

Stack Overflow用户

发布于 2013-07-12 13:58:34

代码语言:javascript
运行
复制
>>> l = ['z', 'a', 'b', 's', 'sa', 'sb', '', 'sz']
>>> sorted(l, key=lambda x:(x[0].replace('s','\x01').replace('S','\x01') if x else '') + x[1:])
['', 's', 'sa', 'sb', 'sz', 'a', 'b', 'z']

出于排序的目的,这个键函数将每个以Ss开头的值替换为一个\x01,它优先于其他所有内容进行排序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17608210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档