如何用冒泡排序对嵌套列表按降序排列?

0 投票
1 回答
1044 浏览
提问于 2025-04-18 14:03

目前我正在处理一个嵌套列表,这个列表打印出地区名称和每个组里的人数。我已经找到了把嵌套列表中的数字转换成整数的方法,同时保持名称为字符串:

def Top5_bottom5():
    with open("APExam.txt", "r") as in_file:
        nested = [line.strip().split(',') for line in in_file][1:]
        nested = [line[0:1] + [int(x) for x in line[1:]] for line in nested]
        print nested

这段代码会打印出以下的州和统计数据:

[['Alabama', 126, 79, 17], ['Alaska', 21, 100, 10], ['Arizona', 190, 59, 16], ['Arkansas', 172, 49, 28], ['California', 4964, 76, 22] ...]

我想使用一个类似于气泡排序的函数,代码大概是这样的:

def bubble(badList):
    length = len(badList) - 1
    unsorted = True

    while unsorted:
        for element in range(0,length):
            unsorted = False
            if badList[element] > badList[element + 1]:
                hold = badList[element + 1]
                badList[element + 1] = badList[element]
                badList[element] = hold
                print badList
            else:
                unsorted = True

但是从这段代码中,我还不太明白如何指定每个子列表中的第[1]个元素,以便按降序进行排序。所以我想让它看起来更像这样:

[['California', 4964, 76, 22], ['Arizona', 190, 59, 16], ['Arkansas', 172, 49, 28], ['Alabama', 126, 79, 17],['Alaska', 21, 100, 10]... ]

总的来说,我想知道如何使用气泡排序对嵌套列表中特定子列表的元素进行排序?

1 个回答

1

与其写 if badList[element] > badList[element + 1],不如试试 if badList[element][1] > badList[element + 1][1]。你可以继续使用 [] 这种方式来查看更深层次的内容。

撰写回答