我正在尝试创建一个函数,该函数返回一个已排序的字符串列表,但附加的条件是它对所有以 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。
2 回答
沧海一幻觉
TA贡献1824条经验 获得超5个赞
您可以使用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
TA贡献1859条经验 获得超6个赞
如果您想生成另一个列表,可以使用 sorted 内置函数,但如果您不介意只更改当前列表,请使用方法list.sort:
>>> l = ['mix', 'xyz', 'apple', 'xanadu']
>>> l.sort(key=lambda s: (not s.startswith('x'), s))
>>> l
['xanadu', 'xyz', 'apple', 'mix']
添加回答
举报
0/150
提交
取消