本文主要介绍Python中,使用简洁的Lambda表达式,对list(列表)中指定的字符串格式的元素,先按数字排序,在按文本格式排序的方法,以及相关的示例代码。

示例list的代码:

lst = ['b-3', 'a-2', 'c-4', 'd-2']
# result:
# ['a-2', 'd-2', 'b-3', 'c-4']

1、使用enumerate()和reversed()实现排序

sorted(lst,key = lambda s : [x if i else int(x) for i,x in enumerate(reversed(s.split("-")))])

2、使用zip()和reversed()实现排序

lst = ['b-3', 'a-2', 'c-4', 'd-2']
res = sorted(lst, key=lambda x: tuple(f(a) for f, a in zip((int, str), reversed(x.split('-')))))
# 或者
res = sorted(lst, key=lambda x: (lambda y: (int(y[1]), y[0]))(x.split('-')))
print(res)
['a-2', 'd-2', 'b-3', 'c-4']

3、使用toolz实现排序

from toolz import compose
res = sorted(lst, key=compose(lambda x: (int(x[1]), x[0]), lambda x: x.split('-')))

相关文档https://toolz.readthedocs.io/en/latest/

4、使用for实现排序

# 用list
>>> sorted(lst, key=lambda x: [(int(num), text) for text, num in [x.split('-')]])
['a-2', 'd-2', 'b-3', 'c-4']
# 使用next()
>>> sorted(lst, key=lambda x: next((int(num), text) for text, num in [x.split('-')]))
['a-2', 'd-2', 'b-3', 'c-4']