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

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


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


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。


大话西游666
浏览 95回答 2
2回答

沧海一幻觉

您可以使用sorted以下内容key:l = ['mix', 'xyz', 'apple', 'xanadu']sorted(l, key=lambda x: (x[0]!='x', x))# ['xanadu', 'xyz', 'apple', 'mix']或@deepspace 建议使用str.startswith:sorted(l, key=lambda s: (not s.startswith('x'), s))上面的键是基于元组对字符串进行排序,由表达式产生的布尔值x[0]!='x'和字符串本身组成:[(x[0]!='x', x) for x in l]# [(True, 'mix'), (False, 'xyz'), (True, 'apple'), (False, 'xanadu')]因此,排序的第一个标准是字符串是否以x(记住FalseandTrue被评估为0and 1)开头,然后是字符串本身是否按字母数字排序。

慕丝7291255

如果您想生成另一个列表,可以使用 sorted 内置函数,但如果您不介意只更改当前列表,请使用方法list.sort:>>> l = ['mix', 'xyz', 'apple', 'xanadu']>>> l.sort(key=lambda s: (not s.startswith('x'), s))>>> l['xanadu', 'xyz', 'apple', 'mix']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python