답변
당신은 충분히 정렬 된 튜플 쉽게 얻을 수 있습니다 :
>>> sorted(mytuple)
[['I', 4], ['say', 2], ['say', 5], ['tomato', 3], ['tomato', 6], ['you', 1]]
이이 목록의 항목을 기준으로 정렬됩니다. 첫 번째 두 개가 일치하면 두 번째 등을 비교합니다.
다른 기준이있는 경우 비교 기능을 제공 할 수 있습니다.
업데이트 : 의견 작성자가 지적한대로 목록을 반환합니다. 다음과 같은 또 다른 튜플을 얻을 수 있습니다 :
>>> tuple(sorted(mytuple))
(['I', 4], ['say', 2], ['say', 5], ['tomato', 3], ['tomato', 6], ['you', 1])
"정렬 된 튜플 가져 오기"는 "정렬 된 새 튜플 만들기"를 의미합니까? –
sorted() 함수는 정상적으로 작동합니다. –
이것은 매우 비효율적입니다. 그러나 mluebke의 조언을 듣고 목록으로 시작하는 것이 어떨까요? Lott가 맞습니다. 튜플을 제 위치에서 정렬 할 수 없습니다. –
당신은 불행하게도, 새로운 튜플을 인스턴스화해야합니다 : 트릭을 할해야
mytuple = sorted(mytuple)
같은 것을. 그러나 sorted
은 터플을 반환하지 않습니다. 필요한 경우 tuple()
으로 전화를 겁니다. 데이터 세트가 길면 잠재적으로 비용이 많이 듭니다.
하위 목록의 두 번째 요소를 설정해야하는 경우 함수에 key
매개 변수를 사용할 수 있습니다.
mytuple = sorted(mytuple, key=lambda row: row[1])
질문 (sorted(..., key=itemgetter(...))
)에 대한 허용 대답에 사용 된 기술은 이러한 종류의 반복자와 함께 작동합니다 : 당신은 그것을위한 도우미 함수가 필요합니다. 여기에 제시된 데이터를 바탕으로, 거기에 제시된 정확한 해결책이 당신이 원하는 것이라고 생각합니다.
튜플을 정렬 할 수 없습니다.
당신이 할 수있는 것은 튜플을 정렬하지 않을 sorted()을 사용하는 것이지만, 튜플로부터 정렬 된 목록을 생성 할 것입니다. 당신이 목록을 작성하고이를 폐기 (및 원본을 폐기되기 때문에이 메모리의 낭비가 될 수
mytuple = tuple(sorted(mytuple, key=lambda row: row[1]))
: 당신이 정말로 정렬 된 튜플이 필요하면 튜플로 분류에서, 당신은 그 반환을 캐스팅 할 수 있습니다 튜플). 기회는 튜플이 필요 없다는 것입니다. 훨씬 더 효율적으로 목록을 시작하고 그것을 정렬하는 것입니다.
필드를 정렬 하시겠습니까? – Jody
튜플을 정렬 할 수 없습니다. 불변입니다. –
그리고 의미 상으로 튜플은이 상황에서도 의미가 없습니다. 튜플을 일반적으로 정렬하는 것은 목록이 사용 되었어야하기 때문에 의미가 없습니다. – nikow