【问题标题】:How can I sort my number list in Python? [duplicate]如何在 Python 中对我的号码列表进行排序? [复制]
【发布时间】:2015-11-18 14:00:45
【问题描述】:
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() 不能工作。

【问题讨论】:

  • sorted(l, key=lambda x: int(x.split(':')[1]))
  • sorted "不起作用" 因为这些不是数字,而是字符串,所以它们按字母顺序排序。

标签: python list sorting


【解决方案1】:
>>> 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()的key参数,并使用slice获取数字,然后使用int()函数将数字转换为int。

【讨论】:

  • lambda x: int(x[2:]) 不会更简单吗?
  • @wnnmaw:好主意,已编辑。谢谢:P
【解决方案2】:

使用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']

【讨论】:

    【解决方案3】:

    您需要 lambda 函数作为排序键来拆分每个元素并将第二部分转换为整数:

    l = sorted(l, key=lambda x: int(x.split(':')[1]))
    

    您还应该重命名list 变量,因为它是python 中的保留名称。

    【讨论】:

      猜你喜欢
      • 2016-10-02
      • 2013-12-06
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-10
      相关资源
      最近更新 更多