我正在尝试创建一个函数,该函数返回已排序的字符串列表,但附加条件是,它首先对所有以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的输出。
发布于 2019-09-25 23:44:39
您可以使用具有以下key的sorted
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开头(请记住,False和True的计算结果分别为0和1),然后字符串本身按字母数字排序。
发布于 2019-09-25 23:47:06
如果想要生成另一个列表,可以使用排序的内置函数,但如果不介意只更改当前列表,则可以使用list.sort方法
>>> l = ['mix', 'xyz', 'apple', 'xanadu']
>>> l.sort(key=lambda s: (not s.startswith('x'), s))
>>> l
['xanadu', 'xyz', 'apple', 'mix']https://stackoverflow.com/questions/58102130
复制相似问题