【问题标题】:Sort an enumerated list by the value [duplicate]按值对枚举列表进行排序[重复]
【发布时间】:2017-07-10 16:19:35
【问题描述】:

MWE:

list1 = [2,5,46,23,9,78]
list1 = list(enumerate(list1))

现在假设我想按索引 1 对这个列表进行排序,即按原始列表 1,即升序。 我该怎么做?

我想要一些可以同时给我索引和值的东西。

list2 = sorted(list1[1], key=float)

【问题讨论】:

  • 如果可以选择,请考虑在枚举之前对列表进行排序:list(enumerate(sorted(list1))),除非您打算保留对原始索引的引用,在这种情况下这不起作用。

标签: python list enumerate


【解决方案1】:

item[1]为键排序:

>>> list2 = sorted(list1, key=lambda x:x[1])
>>> list2
[(0, 2), (1, 5), (4, 9), (3, 23), (2, 46), (5, 78)]

【讨论】:

    【解决方案2】:

    这样的?

    >>> from operator import itemgetter
    >>> sorted(list1, key=itemgetter(1))
    [(0, 2), (1, 5), (4, 9), (3, 23), (2, 46), (5, 78)]
    

    通过为key 提供一个参数的函数,我们为sorted 使用的列表元素指定了一个比较键。 itemgetter 是对项目 getter 运算符 [i] 的一个很好的功能包装器。

    【讨论】:

      【解决方案3】:

      您需要传入整个列表(不仅仅是第一个元素),并使用 lambda 函数对值进行排序 - x[1]

      >>> list1 = [2,5,46,23,9,78]
      >>> list2 = list(enumerate(list1))
      >>> list2
      [(0, 2), (1, 5), (2, 46), (3, 23), (4, 9), (5, 78)]
      >>> list3 = sorted(list2, key=lambda x: x[1])
      >>> list3
      [(0, 2), (1, 5), (4, 9), (3, 23), (2, 46), (5, 78)]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-09
        • 1970-01-01
        • 1970-01-01
        • 2021-05-10
        • 1970-01-01
        • 2021-06-07
        • 2017-06-11
        • 1970-01-01
        相关资源
        最近更新 更多