为二维数组编写我自己的 sort() 函数

Writing my own sort() function for 2D array

我需要为作业编写自己的 sort() 函数。让我们从这个列表开始排序:

data_list = [-5, -23, 0, 100, 23, -6, 23, 67]

我创建了一个新列表,该列表将被排序,暂时为空:

new_list = []

这是我在 Whosebug 上找到的一些代码,谢谢社区 :)

def sortData(lista):
    while lista:
        minimum = lista[0]  # arbitrary number in list 
        for x in lista: 
            if x < minimum:
                minimum = x
        new_list.append(minimum)
        lista.remove(minimum) 
    return new_list

sortData(data_list)        
print(new_list)

结果是

new_list = [-23, -6, -5, 0, 23, 23, 67, 100]

到目前为止一切顺利。但我需要的是对二维列表进行排序,我需要按最后一列的降序对它进行排序。这是二维列表

lista = [['countries', 2019, 2021, 2022],['aruba', 2,13,8],
         ['barbados', 6,34,-39],['japan', 12,8,16]]

如您所知,显然我不能在排序中包含第一行。所以排序需要从第二行开始,数据需要按照最后一列降序排列。期望的结果是:

listaSorted = [['countries', 2019, 2021, 2022],['japan', 12,8,16],['aruba', 2,13,8],['barbados', 6,34,-39]]

如果我使用当前代码,我只会得到按第一列排序并包括第一行的列表,请参见此处:

def sortData(lista):
    while lista:
        minimum = lista[0]  # arbitrary number in list 
        for x in lista: 
            if x < minimum:
                minimum = x
        new_list.append(minimum)
        lista.remove(minimum) 
    return new_list

listToSort = [['countries', 2019, 2021, 2022],['japan', 12,8,16],['aruba', 2,13,8],['barbados', 6,34,-39]]
new_list = []

sortData(listToSort)        
print(new_list)

new_list = [['aruba', 2, 13, 8], ['barbados', 6, 34, -39], ['countries', 2019, 2021, 2022], ['japan', 12, 8, 16]]

所以那行不通:(

我无法使用任何导入的模块。我被告知不要从第一个列表中删除元素。我同意。这可能会弄乱我程序的早期部分。我很困惑,任何帮助都会很棒!

不要将 xminimum 进行比较,而是将 x[3]minimum[3] 进行比较,这是最后一列。然后根据需要更改比较顺序 maximum

def sortData(lista):
    new_list = []
    while lista:
        maximum = lista[0]
        for x in lista:
            if x[3] > maximum[3]:
                maximum = x
        new_list.append(maximum)
        lista.remove(maximum)
    return new_list

listToSort = [['countries', 2019, 2021, 2022], ['japan', 12, 8, 16], ['aruba', 2, 13, 8], ['barbados', 6, 34, -39]]
new_list = sortData(listToSort)
print(new_list)

也不要在方法中定义要使用的全局变量,在方法中实例化new_list然后在主代码中检索它


对于您的文化,内置 sorted 可以用

完成
new_list = sorted(listToSort, key=lambda x: x[3], reverse=True)
print(new_list)

你的比较标准是错误的。将 x < minimum 更改为 x[-1] < minimum[-1]。这将按 递增 顺序的最后一列对二维数组进行排序。要按降序排序,请将 < 更改为 >

顺便说一句,你找到的排序功能是垃圾。这就是所谓的选择排序,它不是最理想的,并且由于使用了 list.remove,所以它是该排序的糟糕实现。你最好使用built-insorted。这样做

sorted(<YOUR ARRAY>, key=lambda x: x[-1], reverse=True)