使用合并排序对元组列表进行排序?

2024-10-01 04:44:16 发布

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

我试图使用合并排序算法对第二个索引上的数字后的元组列表进行排序,但我不确定如何进行排序

这是我试图排序的元组列表:

list_of_tuples = [('Birds of Prey', 97.1),
                  ('Dolittle', 175.0),
                  ('The Gentlemen', 7.0),
                  ('Falling', 22.0)]

我可以实现一个通用的合并排序算法,但我不能按照第二个索引元组中的数字排序

这是我对常规合并排序的实现:

def merge_sort(arr):
    if len(arr) > 1:
        mid = len(arr) // 2
        left = arr[:mid]
        right = arr[mid:]
        merge_sort(left)
        merge_sort(right)

    i = j = k = 0
    while i < len(left) and j < len(right):
        if left[i] < right[j]:
            arr[k] = left[i]
            i += 1
        else:
            arr[k] = right[j]
            j += 1
        k += 1

    while i < len(left):
        arr[k] = left[i]
        i += 1
        k += 1

    while j < len(right):
        arr[k] = right[j]
        j += 1
        k += 1

    return arr

我怎样才能使它适合这个问题

首选的答案是,它返回的元组末尾的数字最高,因此结果将是('Dolittle', 175.0)


Tags: ofright算法列表len排序数字merge
1条回答
网友
1楼 · 发布于 2024-10-01 04:44:16

您可以在Python's sort implementation后面添加一个key参数:

def merge_sort(arr, key=lambda x: x):
    if len(arr) < 2:
        return arr

    mid = len(arr) // 2
    left = arr[:mid]
    right = arr[mid:]
    merge_sort(left)
    merge_sort(right)

    i = j = k = 0
    while i < len(left) and j < len(right):
        if key(left[i]) < key(right[j]):
            arr[k] = left[i]
            i += 1
        else:
            arr[k] = right[j]
            j += 1
        k += 1

    while i < len(left):
        arr[k] = left[i]
        i += 1
        k += 1

    while j < len(right):
        arr[k] = right[j]
        j += 1
        k += 1

    return arr

那么您所需要做的就是:res = merge_sort(list_of_tuples, key=lambda x: x[1])

或者使用python的排序实现:res = sorted(list_of_tuples, key=lambda x: x[1])

相关问题 更多 >