Python排序元组列表

2024-10-01 17:21:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个排序算法,能很好地处理数字列表。从最低到最高。我需要的是修改算法,以便可以设置元组列表作为参数。在

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,我可以得到以下数据: (100100100),(255,0,0),(200200200),(0255,0) 排序后,应为: (0255,0),(100100100),(200200200),(255,0,0) 该算法比较每个数字的第一个数字,在按第一个数字排序后,再比较第二个数字。以此类推直到最后一个数字。因此,它不需要比较数字,而是要比较元组的所有第一个数字,然后再比较第二个元组,依此类推。在


Tags: in算法列表forreturn排序def数字
3条回答

[The algorithm] has to compare all the first numbers of the tuples, then the second ones, and so on.

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

尝试在键上排序,该键将列表排序到位。它还提供了基于元组元素索引对元组进行排序的便捷方法。
i、 e.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)]
>>> 

你基本上是在寻找多属性排序。在

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

或者你可以用

^{pr2}$

相关问题 更多 >

    热门问题