【问题标题】:Sort list of lists of strings in Python [duplicate]Python中字符串列表的排序列表[重复]
【发布时间】:2014-10-04 12:52:07
【问题描述】:

如何根据第一个元素对以下内容进行排序?

list1 = [["Value313",1],["Value421",3],["Value234",2]]

最终,我应该得到以下信息:

list1 = [["Value234",2],["Value313",1],["Value421",3]]

【问题讨论】:

  • list1.sort() 将在第一个元素上默认排序 list1(原位)

标签: python list lambda


【解决方案1】:

列表的默认排序顺序(按字典顺序)已经是你想要的了。

>>> list1 = [["Value313",1],["Value421",3],["Value234",2]]
>>> list1.sort()
>>> print list1
[['Value234', 2], ['Value313', 1], ['Value421', 3]]

【讨论】:

    【解决方案2】:
    sorted(list1,key=lambda x : x[0])
    
    [['Value234', 2], ['Value313', 1], ['Value421', 3]]
    

    使用 sorted 并使用键 lambda x[0] 其中x[0] 是每个子列表中的第一个元素

    或就地排序以避免创建新列表:

    list1 = [["Value313",1],["Value421",3],["Value234",2]]
    
    list.sort(list1,key=lambda x : x[0])
    print list1
    [['Value234', 2], ['Value313', 1], ['Value421', 3]]
    

    【讨论】:

    • 反对票的具体原因是什么?
    【解决方案3】:

    要对list1 进行就地排序(不创建另一个列表),请使用:

    from operator import itemgetter
    list1.sort(key=itemgetter(0))
    

    如果你想创建另一个列表并留下list1 unsorted 使用:

    from operator import itemgetter
    list2 = sorted(list1, key=itemgetter(0))
    

    您可以使用 lambda,但 operator.itemgetter 通常具有更好的性能,因为它处于 C 级别。

    【讨论】:

    • 我确实做到了,对于整数对列表并使用sorted,我(旧)机器上的itemgetter 解决方案每个循环207 µslambda 每个循环 359 µs
    猜你喜欢
    • 2017-05-15
    • 2021-01-25
    • 2021-07-10
    • 2012-07-22
    • 2023-03-20
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 2019-05-07
    相关资源
    最近更新 更多