list = ['c:8', 'c:9', 'c:13', 'c:19', 'c:2', 'c:3', 'c:0', 'c:1', 'c:6', 'c:7', 'c:4', 'c:5', 'c:14', 'c:18', 'c:17', 'c:12', 'c:15', 'c:11', 'c:10', 'c:16', 'c:20']
我用" sorted()"但得到这个结果
['c:0', 'c:1', 'c:10', 'c:11', 'c:12', 'c:13', 'c:14', 'c:15', 'c:16', 'c:17', 'c:18', 'c:19', 'c:2', 'c:20', 'c:3', 'c:4', 'c:5', 'c:6', 'c:7', 'c:8', 'c:9']
但我想要的是
['c:0', 'c:1', 'c:2', 'c:3', 'c:4', 'c:5', 'c:6', 'c:7', 'c:8', 'c:9', 'c:10', 'c:11', 'c:12', 'c:13', 'c:14', 'c:15', 'c:16', 'c:17', 'c:18', 'c:19','c:20']
除了得到我想要的东西外,我还想要sorted()
无法工作的原因。
答案 0 :(得分:2)
>>> l = ['c:8', 'c:9', 'c:13', 'c:19', 'c:2', 'c:3', 'c:0', 'c:1', 'c:6', 'c:7', 'c:4', 'c:5', 'c:14', 'c:18', 'c:17', 'c:12', 'c:15', 'c:11', 'c:10', 'c:16', 'c:20']
>>> l.sort(key=lambda x: int(x[2:])
>>> l
['c:0', 'c:1', 'c:2', 'c:3', 'c:4', 'c:5', 'c:6', 'c:7', 'c:8', 'c:9', 'c:10', 'c:11', 'c:12', 'c:13', 'c:14', 'c:15', 'c:16', 'c:17', 'c:18', 'c:19', 'c:20']
由于'c:1', 'c:10', 'c:11'
是字符串,'c:1', 'c:10', 'c:11'
都以c:1
开头。所以你得到像'c:1', 'c:10', 'c:11', 'c:12', 'c:13', 'c:14'
这样的东西。
作为我的代码,使用sorted()
或list.sort()
的关键参数,并使用slice获取数字,然后使用int()
函数将数字转换为int。
答案 1 :(得分:1)
将sorted
与lambda
一起使用,sort
上的数字为string
。
sorted(list, key=lambda x:int(x.split(':')[-1]))
['c:0',
'c:1',
'c:2',
'c:3',
'c:4',
'c:5',
'c:6',
'c:7',
'c:8',
'c:9',
'c:10',
'c:11',
'c:12',
'c:13',
'c:14',
'c:15',
'c:16',
'c:17',
'c:18',
'c:19',
'c:20']
答案 2 :(得分:1)
您需要lambda函数作为排序的关键,以拆分每个元素并将第二部分转换为整数:
l = sorted(l, key=lambda x: int(x.split(':')[1]))
此外,您应该重命名list
变量,因为它是python中的保留名称。