我有一个与数字列表完美配合的排序算法。它从最低到最高排序。我需要的是修改算法,以便我可以设置一个元组列表作为参数。
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) 该算法比较每个数字的第一个数字,并在按第一个数字排序之后,然后比较第二个数字。依此类推,直到最后一位数字。因此,它不是比较数字,而是必须比较元组的所有第一个数字,然后是第二个数字,依此类推。
答案 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))