如何对包含空格分隔数字的字符串列表进行排序?

时间:2019-01-02 17:42:59

标签: python list sorting

例如:列表

['14', '15 20 1', '17', '10 25 40 3', '8']

此列表必须按照其长度升序排列,并且以相同的长度,相对于它们不同的第一个数字以升序排列

这是我期望的列表:

['8', '14', '17', '15 20 1', '10 25 40 3']

我该如何排序?

我试图将字符串列表转换为列表列表,但无济于事:

l.sort(key=lambda x: (len(x),len(x[0]),x))

问题是当我有这样的列表时:

['10 11 12 13 4','10 11 12 13 2']

长度相同,但最后一个数字较小。

2 个答案:

答案 0 :(得分:4)

def cf(k):
    t = tuple(map(int, k.split()))
    return len(t), t
x = ['14', '15 20 1', '17', '10 25 40 3', '8']
x.sort(key=cf)

输出:

['8', '14', '17', '15 20 1', '10 25 40 3']

答案 1 :(得分:2)

您可以使用sortedkey,以便分别根据项目的长度和顺序对项目进行排序:

sorted(s, key = lambda x: (len(x), list(map(int,x.split()))))
['8', '14', '17', '15 20 1', '10 25 40 3']

一个更清晰的例子:

s = ['12 1 3', '1', '0', '10 2', '10 3', '12 3 1 ', '12 1 2']
sorted(s, key = lambda x: (len(x), list(map(int,x.split()))))
['0', '1', '10 2', '10 3', '12 1 2', '12 1 3', '12 3 1 ']