2017-09-03 2 views
1

숫자 목록과 완벽하게 작동하는 정렬 알고리즘이 있습니다. 그것은 가장 낮은 것에서 가장 높은 것 순으로 정렬됩니다. 내가 필요한 것은 인수로 튜플 목록을 설정할 수 있도록 알고리즘을 수정하는 것입니다.파이썬 - 튜플 목록 정렬

def maxList(A): 
    return(max(num for num in A)) 
def obtainDigit(num, n): 
    return (num // 10 ** n) % 10 
def linkLists(A): 
    lAux = [] 
    for sublist in A: 
     lAux.extend(sublist) 
    return(lAux) 
def generateSublists(A, digit): 
    subListsAux = [[] for i in range(255)] 
    for num in A: 
     subListsAux[obtainDigit(num, digit)].append(num) 
    return(subListsAux) 
def radixSort(A): 
    iterations = len(str(maxList(A))) 
    for digit in range(iterations): 
     sublists = generateSublists(A, digit) 
     A = linkLists(sublists) 
    return(A) 

튜플 목록은 실제로 이미지에서 가져온 RGB 값 집합입니다. PIL을 사용하면 (100,100,100), (255,0,0), (200,200,200), (0,255,0) 정렬 후 (0,255,0), (100,100,100) , (200,200,200), (255,0,0) 알고리즘은 각 숫자의 첫 번째 숫자를 비교하고 첫 번째 숫자로 정렬 한 후 두 번째 숫자를 비교합니다. 그리고 마지막 자리까지. 따라서 숫자를 비교하는 대신 튜플의 첫 번째 숫자를 비교 한 다음 두 번째 숫자를 비교해야합니다.

+0

. 그러나 문제를 해결할 수 있도록 위의 알고리즘을 수정하는 방법이 있습니까? 튜플과 함께 작동하게 만들 필요가 있습니다. –

답변

1

목록을 정렬하는 키 정렬을 시도하십시오. 또한 튜플 요소의 인덱스를 기반으로 튜플을 정렬하는 편리한 방법을 제공합니다.
tup[0] 첫 번째 튜플 요소를 정렬하려면
tup[1] 두 번째로 정렬하는 식으로합니다.

자세한 내용은 here을 참조하십시오.

t = [(100,100,100),(255,0,0),(200,200,200),(0,255,0) ] 
>>> t.sort(key=lambda tup:tup[0]) 
>>> t 
[(0, 255, 0), (100, 100, 100), (200, 200, 200), (255, 0, 0)] 
>>> 
+0

하나의 애트리뷰트 만 사용하기 때문에't = [(100,100,100), (255,0,0), (100,100,0), (200,200,200), (0,255,0)]'에 대해서 실패합니다 –

+0

OP의 요구 사항이 명확하지 않습니다 . 튜플의 첫 번째 요소 만 원했고 그의 예제에도 반영된 것으로 생각했습니다. 그가 튜플의 모든 인덱스 요소를 필요로한다면 우리는 내가 알고있는 당신이 언급 한 방법을 사용할 수 있습니다. –

0

기본적으로 여러 속성 정렬을 찾고 있습니다.

t = [(100,100,100),(255,0,0),(100,100,0),(200,200,200),(0,255,0) ] 

t1 = sorted(t, key = lambda x: (x[0], x[1], x[2])) 

또는

import operator 
t.sort(key = operator.itemgetter(0, 1, 2)) 
1

[알고리즘]을 사용할 수는 튜플, 그래서 다음 두 번째 사람, 그리고 모든 첫 번째 숫자를 비교할 수있다.

은 파이썬에서 직접 튜플의 목록을 정렬 할 수 있습니다, 그것은 당신이 설명대로 정확하게 동작 : 난 그냥 정렬 속성이 문제를 해결하는 방법을 살펴 보았다

>>> sorted([(100, 100, 100), (255, 0, 0), (200, 200, 200), (0, 255, 0)]) 
[(0, 255, 0), (100, 100, 100), (200, 200, 200), (255, 0, 0)] 
관련 문제