【问题标题】:Sorting of List with user defined key returning None使用用户定义的键对列表进行排序返回无
【发布时间】:2014-11-28 09:21:51
【问题描述】:

我正在尝试对元组列表进行排序。

tuples.sort(key=lambda tup: tup[-1])

我正在调用函数

def sort_last(tuples):

喜欢

sort_last([(1, 3), (3, 2), (2, 1)])

sort_last([(2, 3), (1, 2), (3, 1)])

return tuples 总是给我NONE 我做错了什么?

【问题讨论】:

  • .sort就地 进行排序并返回 None。如果您在调用函数后检查tuples,您会发现tuples 已排序...
  • @JonClements 但他说他正在“返回”元组。
  • @theharshest 好点,但它看起来不像 OP......虽然没有函数的实际主体,但很难分辨......

标签: python list python-2.7 sorting tuples


【解决方案1】:
>>> def sort_last(tuples=None):
...     tuples.sort(key=lambda tup: tup[-1])
...     return tuples

>>> sort_last([(2, 1), (3, 2), (1, 3)])
[(2, 1), (3, 2), (1, 3)]

sort(...)
    L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
    cmp(x, y) -> -1, 0, 1

所以 List 排序方法返回 None 并对 original List 本身进行排序。

您可以使用sorted 方法返回排序后的新列表,而无需changing 原始列表。

sorted(...)
    sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

>>> def sort_last(tuples):
...     return sorted(tuples, key=lambda tup: tup[-1])
... 
>>> sort_last([(2, 1), (3, 2), (1, 3)])
[(2, 1), (3, 2), (1, 3)]

【讨论】:

    【解决方案2】:

    list.sort return None list.sort 是一个表达式而不是一个函数,当你 print list.sort 它返回 Nonelist 是可变的,因此在 list 中可以看到变化。

    In [200]: l =  [(2, 1), (3, 2), (1, 3)]
    
    In [201]: l.sort(key=lambda t: t[-1])
    
    In [202]: l
    Out[202]: [(2, 1), (3, 2), (1, 3)]
    
    In [205]: print l.sort(key=lambda t: t[-1])
    None
    

    试试sorted:-

    In [209]: a = sorted(l, key=lambda x: x[-1]) # retrun sorted sequence
    
    In [210]: a
    Out[210]: [(2, 1), (3, 2), (1, 3)]
    
    
    In [211]: a = l.sort(key=lambda t: t[-1]) # list.sort return None 
    
    In [212]: a
    

    【讨论】:

      【解决方案3】:

      使用排序:

       >>> sorted([(1, 3), (3, 2), (2, 1)], key=lambda x:x[0])
       [(1, 3), (2, 1), (3, 2)]
       >>> sorted([(1, 3), (3, 2), (2, 1)], key=lambda x:x[1])
       [(2, 1), (3, 2), (1, 3)]
       >>>
      

      【讨论】:

        【解决方案4】:

        您使用tuples 作为list 对象。

        list.sort 会对列表本身进行排序,它不会返回排序后的列表。

        我想要排序列表然后使用sorted

        【讨论】:

          猜你喜欢
          • 2018-08-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-10
          相关资源
          最近更新 更多