使用用户定义的键返回List的列表无

时间:2014-11-28 09:21:51

标签: python list python-2.7 sorting tuples

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

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 我做错了什么?

4 个答案:

答案 0 :(得分:2)

>>> 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)]

答案 1 :(得分:1)

当您list.sort None返回list.sortprint时,

list.sort返回None list表达式不是函数是可变的,因此在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

答案 2 :(得分:1)

使用已排序:

 >>> 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)]
 >>>

答案 3 :(得分:0)

sems您使用tuples作为list对象。

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

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