如何在Python中的元组列表上使用归并排序?

问题描述 投票:0回答:1
def mergeSort(arr):
    if len(arr) > 1:
 
        mid = len(arr)//2
 
        L = arr[:mid]
 
        R = arr[mid:]
 
        mergeSort(L)
 
        mergeSort(R)
 
        i = j = k = 0
 
        while i < len(L) and j < len(R):
            if L[i][1] <= R[j][1]:
                arr[k] = L[i][1]
                i += 1
            else:
                arr[k] = R[j][1]
                j += 1
            k += 1
 
        while i < len(L):
            arr[k] = L[i][1]
            i += 1
            k += 1
 
        while j < len(R):
            arr[k] = R[j][1]
            j += 1
            k += 1
    print(arr)

将其应用于元组列表:

tuplelist = [(1, 600), (2, 800), (3, 200)]

给了我类型错误:

TypeError:“int”对象不可下标。

合并排序确实可以在正常的整数列表上运行。我尝试将其更改为目标我想要合并排序的值:根据每个元组的索引 1 按升序对元组进行排序,因此我添加的原因是:

if L[i][1] <= R[j][1]
,例如。

如何更改排序算法,使其适用于元组列表?

python database algorithm sorting data-structures
1个回答
0
投票

这两行仅用元组的第二个元素替换元组,因此以后尝试比较元组的第二个元素将会失败。

                arr[k] = L[i][1]

                arr[k] = R[j][1]

分配时不要使用

[1]
索引。将它们更改为:

                arr[k] = L[i]

                arr[k] = R[j]
© www.soinside.com 2019 - 2024. All rights reserved.