2009-05-27 8 views
0

내가 this one에 비슷한 질문을 대신 내 튜플 목록을 포함 포함 된 튜플을 정렬 :다음과 같이 목록

mytuple = (
["tomato", 3], 
["say", 2], 
["say", 5], 
["I", 4], 
["you", 1], 
["tomato", 6], 
) 

이 분류의 가장 효율적인 방법은 무엇입니까?

+0

필드를 정렬 하시겠습니까? – Jody

+2

튜플을 정렬 할 수 없습니다. 불변입니다. –

+0

그리고 의미 상으로 튜플은이 상황에서도 의미가 없습니다. 튜플을 일반적으로 정렬하는 것은 목록이 사용 되었어야하기 때문에 의미가 없습니다. – nikow

답변

7

당신은 충분히 정렬 된 튜플 쉽게 얻을 수 있습니다 :

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

"정렬 된 튜플 가져 오기"는 "정렬 된 새 튜플 만들기"를 의미합니까? –

+0

sorted() 함수는 정상적으로 작동합니다. –

+1

이것은 매우 비효율적입니다. 그러나 mluebke의 조언을 듣고 목록으로 시작하는 것이 어떨까요? Lott가 맞습니다. 튜플을 제 위치에서 정렬 할 수 없습니다. –

1

당신은 불행하게도, 새로운 튜플을 인스턴스화해야합니다 : 트릭을 할해야

mytuple = sorted(mytuple) 

같은 것을. 그러나 sorted은 터플을 반환하지 않습니다. 필요한 경우 tuple()으로 전화를 겁니다. 데이터 세트가 길면 잠재적으로 비용이 많이 듭니다.

하위 목록의 두 번째 요소를 설정해야하는 경우 함수에 key 매개 변수를 사용할 수 있습니다.

mytuple = sorted(mytuple, key=lambda row: row[1]) 
1

질문 (sorted(..., key=itemgetter(...)))에 대한 허용 대답에 사용 된 기술은 이러한 종류의 반복자와 함께 작동합니다 : 당신은 그것을위한 도우미 함수가 필요합니다. 여기에 제시된 데이터를 바탕으로, 거기에 제시된 정확한 해결책이 당신이 원하는 것이라고 생각합니다.

5

튜플을 정렬 할 수 없습니다.

당신이 할 수있는 것은 튜플을 정렬하지 않을 sorted()을 사용하는 것이지만, 튜플로부터 정렬 된 목록을 생성 할 것입니다. 당신이 목록을 작성하고이를 폐기 (및 원본을 폐기되기 때문에이 메모리의 낭비가 될 수

mytuple = tuple(sorted(mytuple, key=lambda row: row[1])) 

: 당신이 정말로 정렬 된 튜플이 필요하면 튜플로 분류에서, 당신은 그 반환을 캐스팅 할 수 있습니다 튜플). 기회는 튜플이 필요 없다는 것입니다. 훨씬 더 효율적으로 목록을 시작하고 그것을 정렬하는 것입니다.