2017-11-25 5 views
0

두 번째 요소로 튜플 목록을 정렬하려고합니다. 목록의 각 튜플은 튜플과 정수로 구성됩니다.파이썬에서 작동하지 않는 두 번째 항목으로 튜플 목록 정렬

l = [((1, 0, 1), 0), ((1, 0, 6), -1), ((1, 0, 8), -1), ((1, 0, 11), 0), ((1, 0, 14), 0), ((1, 0, 15), 0), ((1, 0, 17), -5), ((1, 0, 20), -3), 
    ((1, 0, 22), 0), ((1, 0, 24), 0)] 

sorted(l, key = lambda x:x[1]) 

print(l) 

sorted(l, key = lambda x:x[0]) 

print(l) # same output 

sorted() 문 튜플의 제 2 요소에 따라리스트를 분류한다 0, -1, -1, 0, 0, 0, -5, -3, 0, 0, 즉 반환해야 이 또는 튜플의 두 번째 요소는 비 감소 순서가 비슷한 같은 목록 :

[((1, 0, 17), -5), ((1, 0, 20), -3), ((1, 0, 6), -1), ((1, 0, 8), -1), ((1, 0, 1), 0), ((1, 0, 11), 0), ((1, 0, 14), 0), ((1, 0, 15), 0), 
     ((1, 0, 22), 0), ((1, 0, 24), 0)] 

그러나 두 print 문이 같은 인쇄 및 변경 원래 목록을 유지하고 있습니다. 왜? 그리고 두 번째 요소로 튜플 목록을 정렬하는 방법은 무엇입니까? 심지어 key=itemgetter(1) 시도했지만 결과는 동일하게 유지됩니다.

+1

sorted() 새 목록을 반환합니다. 대신에 list.sort()를 사용하십시오. –

답변

1

sorted반환하는 목록의 정렬 된 버전.

목록 자체는 수정되지 않았습니다. 정렬되지 않은 목록을 항상 인쇄하고 있습니다. 시도 :

sorted_list_1 = sorted(l, key=lambda x: x[0]) 
sorted_list_2 = sorted(l, key=lambda x: x[2]) 
print (sorted_list1, sorted_list2)