【问题标题】:Sorting an array by a number string (Python 3.4.2)按数字字符串对数组进行排序(Python 3.4.2)
【发布时间】:2015-02-12 19:29:27
【问题描述】:

我一直在尝试对如下所示的数组进行排序:

sav = [['Name: ', 'Alex', 'Score: ', '2'], ['Name: ', 'Josh, 'Score: ', '3'], ['Name: ', 'James', 'Score: ', '1']]  

使其显示为:

sav = [['Name: ', 'James', 'Score: ', '1'], ['Name: ', 'Alex, 'Score: ', '2'], ['Name: ', 'Josh', 'Score: ', '3']]

这将按[3] 索引排序,但由于数字是一个字符串,我不确定如何执行此操作。 (这可能看起来像一个重复的问题,但我环顾四周并没有找到答案。)

【问题讨论】:

    标签: python arrays sorting python-3.x


    【解决方案1】:

    您可以使用以下lambda 作为排序键:

    >>> sorted(sav, key=lambda x: int(x[3]))
    [['Name: ', 'James', 'Score: ', '1'],
     ['Name: ', 'Alex', 'Score: ', '2'],
     ['Name: ', 'Josh', 'Score: ', '3']]
    

    这里的lambda 函数从每个列表中挑选出索引为3 的元素并将其视为整数(使用int)。该列表按这些整数排序。

    如果保留为字符串,则排序时会得到奇怪的结果,因为字符串是按字典顺序排序的。例如,'12' < '8'

    这将返回列表 sav 的排序副本 - 您可以将名称重新绑定到排序列表:

    sav = sorted(sav, key=lambda x: int(x[3]))
    

    【讨论】:

    • 当我尝试这个时,输出是完全一样的(即使我查看了你的代码并且看起来它可以工作)
    • @zeldor 您需要说sav = sorted(...,以便将排序列表分配回您的变量。或者使用sort(sav, key=...)就地排序。
    • 谢谢你们,这很有效。原来我之前尝试过的所有解决方案都只需要 'sav =' !!
    猜你喜欢
    • 2022-11-25
    • 2012-10-14
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2016-04-23
    相关资源
    最近更新 更多