【问题标题】:How to sort list of strings (containing numbers) in an ascending order [duplicate]如何按升序对字符串列表(包含数字)进行排序[重复]
【发布时间】:2023-04-08 16:31:01
【问题描述】:

我知道这是一个非常基本的问题,但从我在搜索时看到的答案中,我没有找到适合这个问题的答案。

我在使用mylist = os.listdir(<folder_path>) 时收到以下文件名称:

['file.0', 'file.1', 'file.10', 'file.100', 'file.2', 'file.3']  

我想像这样按升序对该列表进行排序:

['file.0', 'file.1', 'file.2', 'file.3', 'file.10', 'file.100']  

我尝试使用mylist.sort(),但它没有任何更改就离开了列表。 sorted() 函数也没有做任何改变。

一种解决方法是将数字与字符串分开并将它们转换为整数到一个新数组:

[0, 1, 10, 100, 2, 3]  

然后对它们进行排序:

[0, 1, 2, 3, 10, 100]  

那我需要一个函数来做"file." + i。

但是有没有更好的方法呢?

我注意到 Windows 可以做到这一点,我认为他们正在通过一些 sting 排序来做到这一点:

【问题讨论】:

  • 应该指出它 is 实际上是对其进行排序,但是由于它们是字符串,file.10 排在file.2 之前,因为1 小于2 (0 无关紧要)。

标签: python string list sorting


【解决方案1】:

我建议使用split('.'),它将列表中的元素拆分到找到. 的位置。如果您随后将最后一个元素转换为 int,则可以将其用作排序键:

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

返回:

['file.0', 'file.1', 'file.2', 'file.3', 'file.10', 'file.100']

【讨论】:

    猜你喜欢
    • 2012-04-03
    • 1970-01-01
    • 2021-08-02
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    相关资源
    最近更新 更多