2014-11-28 2 views
1

튜플 목록을 정렬하려고합니다.반환하는 사용자 정의 키가있는 목록 정렬 없음

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

'.sort' * in-place *를 리턴하고'없음 '을 리턴합니다. 함수를 호출 한 후에'튜플 (tuple) '을 체크하면'튜플 (tuple)'이 정렬되어 있다는 것을 알 수 있습니다. –

+0

@JonClements하지만 그는 '리턴'튜플이라고 말합니다. – theharshest

+0

@ theharshest 좋은 지적하지만 OP처럼 보이지 않습니다 ... 기능의 실제 본문 없이는 말하기 어렵습니다 ... –

답변

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 

그래서 목록 정렬 방법이 없음을 반환하고 original 목록 자체를 정렬합니다.

changing 원래 목록없이 정렬 된 새 목록을 반환하는 sorted 메서드를 사용할 수 있습니다.

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

당신은 tupleslist 개체로 사용합니다.

list.sort은 목록 자체를 정렬하므로 정렬 된 목록을 반환하지 않습니다.

당신은 정렬 된 목록은 다음 sorted

1

list.sort 반환 Nonelist.sort이 표현되지는 printlist.sortNonelist이 따라서 변경 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 
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)] 
>>>