【问题标题】:How to sort python list of strings of numbers如何对数字字符串的python列表进行排序
【发布时间】:2013-07-02 16:34:44
【问题描述】:

我正在尝试对包含数字的字符串列表进行排序

a = ["1099.0","9049.0"]
a.sort()
a
['1099.0', '9049.0']

b = ["949.0","1099.0"]
b.sort()    

b
['1099.0', '949.0']

a
['1099.0', '9049.0']

但列表 b 正在排序,而不是列表 a

【问题讨论】:

标签: python


【解决方案1】:

您想根据float 值(不是字符串值)进行排序,所以试试:

>>> b = ["949.0","1099.0"]
>>> b.sort(key=float)
>>> b
['949.0', '1099.0']

【讨论】:

    【解决方案2】:

    在 sort 内使用 lambda 将它们转换为浮点数,然后正确排序:

    a = sorted(a, key=lambda x: float(x))
    

    所以你会将它们保存为字符串,但按值排序,而不是按字典排序

    【讨论】:

    • @Keyser 我的意思是你不需要 lambda,你可以使用 key=float
    • 让我的回答更酷?实际上,我忘记了关键功能。 @Keyser 使用 sort(key=float) 实现相同的效果
    【解决方案3】:

    如果有人处理数字和扩展名,例如 0.png、1.png、10.png、2.png... 我们需要检索扩展名之前的字符并对其进行排序,因为此扩展名不允许我们将名称转换为浮点数:

    myList = sorted(myList, key=lambda x: float(x[:-4]))
    

    【讨论】:

    • 记得像myList = sorted(myList, key=lambda x: float(x[:-4]))一样更新列表
    【解决方案4】:

    将它们转换为intfloat 甚至decimal(因为它有尾随数字)

    >>> b = [float(x) for x in b]
    >>> b.sort()
    >>> b
    [949.0, 1099.0]
    

    【讨论】:

    • 这意味着改变b中元素的类型,这可能是也可能不是理想的。
    猜你喜欢
    • 2011-03-26
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    相关资源
    最近更新 更多