如何在Python中对我的数字列表进行排序?

时间:2015-11-18 14:00:46

标签: python list sorting

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()无法工作的原因。

3 个答案:

答案 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)

sortedlambda一起使用,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中的保留名称。