首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建一个对两个列表进行排序的函数

创建一个对两个列表进行排序的函数
EN

Stack Overflow用户
提问于 2019-09-25 23:43:16
回答 2查看 73关注 0票数 0

我正在尝试创建一个函数,该函数返回已排序的字符串列表,但附加条件是,它首先对所有以w/ 'x'开头的字符串进行排序。

因此,例如,列表['mix', 'xyz, 'apple', 'xanadu']将生成['xanadu', xyz', 'apple', 'mix']

代码语言:javascript
复制
def front_x(words):
    x = []
    y = []
    for k, v in enumerate(words):
        if v.startswith("x"):
            x.append(v)
        else:
            y.append(v)

    x.sort()
    y.sort()
    print(x.extend(y))

this_list = ['mix', 'xyz', 'apple', 'xanadu', 'aardvark']

front_x(this_list)

这给了我一个None的输出。

EN

回答 2

Stack Overflow用户

发布于 2019-09-25 23:44:39

您可以使用具有以下keysorted

代码语言:javascript
复制
l = ['mix', 'xyz', 'apple', 'xanadu']

sorted(l, key=lambda x: (x[0]!='x', x))
# ['xanadu', 'xyz', 'apple', 'mix']

或者像@deepspace建议的那样使用str.startswith

代码语言:javascript
复制
sorted(l, key=lambda s: (not s.startswith('x'), s))

上面的关键是根据元组和字符串本身对字符串进行排序,元组由表达式x[0]!='x'产生的布尔值组成:

代码语言:javascript
复制
[(x[0]!='x', x) for x in l]
# [(True, 'mix'), (False, 'xyz'), (True, 'apple'), (False, 'xanadu')]

因此,排序的第一个标准是字符串是否以x开头(请记住,FalseTrue的计算结果分别为01),然后字符串本身按字母数字排序。

票数 6
EN

Stack Overflow用户

发布于 2019-09-25 23:47:06

如果想要生成另一个列表,可以使用排序的内置函数,但如果不介意只更改当前列表,则可以使用list.sort方法

代码语言:javascript
复制
>>> l = ['mix', 'xyz', 'apple', 'xanadu']
>>> l.sort(key=lambda s: (not s.startswith('x'), s))
>>> l
['xanadu', 'xyz', 'apple', 'mix']
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58102130

复制
相关文章

相似问题

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