例如:列表
['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']
长度相同,但最后一个数字较小。
答案 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)
您可以使用sorted
和key
,以便分别根据项目的长度和顺序对项目进行排序:
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 ']