按子串排序字符串列表

时间:2018-03-29 22:25:37

标签: python list sorting

我需要对此列表进行排序

list = ['16. Michlík', '4. and 65. Bichakhchyan', '15. Pavol']

根据每个字符串的第一个数字。所以输出应该是这样的

list = ['4. and 65. Bichakhchyan', '15. Pavol', '16. Michlík']

这是我到目前为止所做的,但是当字符串

中有多个数字时它不起作用
sorted(list, key=lambda x : x[:x.find(".")])

你能帮我吗?

3 个答案:

答案 0 :(得分:3)

您必须将模式转换为整数,否则将其作为字符串进行比较。

sorted(list, key=lambda x : int(x[:x.find(".")]))

答案 1 :(得分:1)

您可以使用正则表达式:

import re
l = ['16. Michlík', '4. and 65. Bichakhchyan', '15. Pavol']
result = sorted(l, key=lambda x:int(re.findall('^\d+', x)[0])) 

输出:

['4. and 65. Bichakhchyan', '15. Pavol', '16. Michlík']

答案 2 :(得分:1)

这是一种方式。

lst = ['16. Michlík', '4. and 65. Bichakhchyan', '15. Pavol']

res = sorted(lst, key=lambda x: int(x.split('.')[0]))

# ['4. and 65. Bichakhchyan', '15. Pavol', '16. Michlík']