我想按照下面的编号排列列表,
01
02
03
001
002
但是默认的排序命令会给我
001
002
01
02
03
答案 0 :(得分:1)
要保留长度排序而不是数字排序,我相信您需要根据2个条件进行排序:
nums = '03 01 002 02 001'
num_array = nums.split()
sorted_nums = sorted(num_array, key=lambda x: [len(x), x])
print(sorted_nums)
输出:
['01', '02', '03', '001', '002']
答案 1 :(得分:1)
或者,对列表进行双重排序:
>>> nums = '03 01 002 02 001'
>>> sorted(sorted(nums.split()),key=len)
['01', '02', '03', '001', '002']
>>>
答案 2 :(得分:0)
s = '001 01 02 03 002'
l = s.split()
print(sorted(l, key=lambda e: (len(e), int(e) )))
输出:
C:\Users\Desktop>py x.py
['01', '02', '03', '001', '002']
答案 3 :(得分:0)
sorted_list = sorted(my_list, key=lambda x: (len(x), x))
首先检查字符串的长度,然后逐个字符地逐个字符串。
答案 4 :(得分:0)
xs = "01 02 03 001 002".split()
print(sorted(xs, key="{:<018s}".format))
# ['001', '002', '01', '02', '03']
除非您打高尔夫球,否则小数位数要超过18个小数,在key
中使用两个条件可能是可行的方法。