我正在尝试对元组列表进行排序。
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
我做错了什么?
答案 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.sort
和print
时, 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)