为二维数组编写我自己的 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]]
所以那行不通:(
我无法使用任何导入的模块。我被告知不要从第一个列表中删除元素。我同意。这可能会弄乱我程序的早期部分。我很困惑,任何帮助都会很棒!
不要将 x
与 minimum
进行比较,而是将 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)
我需要为作业编写自己的 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]]
所以那行不通:(
我无法使用任何导入的模块。我被告知不要从第一个列表中删除元素。我同意。这可能会弄乱我程序的早期部分。我很困惑,任何帮助都会很棒!
不要将 x
与 minimum
进行比较,而是将 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)