我有名单。
li = ['455:1', '2919:1', '275:71', '2840:64']
我试过了:
print sorted(li)
result: ['275:71', '2840:64', '2919:1', '455:1']
和
print sorted(li, key=itemgetter(0))
result: ['2919:1', '275:71', '2840:64', '455:1']
和
print sorted(li, key=lambda x: (x[0]))
result: ['2919:1', '275:71', '2840:64', '455:1']
我想要
['275:71', '455:1', '2840:64', '2919:1']
有任何修复建议吗?
答案 0 :(得分:2)
您需要拆分字符串并将第一个值转换为整数:
sorted(li, key=lambda s: int(s.split(':')[0]))
否则你只是按字典顺序而不是数字排序。
演示:
>>> li = ['455:1', '2919:1', '275:71', '2840:64']
>>> sorted(li, key=lambda s: int(s.split(':')[0]))
['275:71', '455:1', '2840:64', '2919:1']
itemgetter(0)
和x[0]
只选择字符串的第一个字符,因此只对'2'
与'4'
进行排序,在具有相同初始字符的值不受影响。