Python - 排序元组列表

时间:2017-09-03 05:45:56

标签: python sorting tuples rgb

我有一个与数字列表完美配合的排序算法。它从最低到最高排序。我需要的是修改算法,以便我可以设置一个元组列表作为参数。

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),(200200200),(0,255,0) 排序后,它应该是: (0,255,0),(100100100),(200200200),(255,0,0) 该算法比较每个数字的第一个数字,并在按第一个数字排序之后,然后比较第二个数字。依此类推,直到最后一位数字。因此,它不是比较数字,而是必须比较元组的所有第一个数字,然后是第二个数字,依此类推。

3 个答案:

答案 0 :(得分:1)

尝试对按键排序的键进行排序。并且还提供了基于元组元素索引对元组进行排序的便捷方法 即JSon schema对第一元组元素进行排序      tup[0]排序第二,依此类推。

有关详细信息,请参阅here

tup[1]

答案 1 :(得分:1)

  

[算法]必须比较元组的所有第一个数字,然后比较第二个数字,依此类推。

在Python中,您可以直接对元组列表进行排序,其行为与您描述的完全相同:

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

答案 2 :(得分:-1)

您基本上在寻找多种属性排序。

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