自定义排序()函数:如何对2D数组中的最后一列进行排序



我想对2D列表进行排序,但使用最后一列作为排序器。这是清单:

list_2 = [['countries', 2019, 2020, 2025],['aruba', 2,2,9],['barbados', 2,2,3],['japan', 2,2,5]]

第一行的国家和年份,不得排序。第二行、第三行和第四行包含国家和数据,需要按最后一列进行排序。到目前为止,这是我的功能:

#create a new analyzed and sorted list, empty, to be used in further analysis
listAnalyzedSort = []
def sortData(lista):
#this function sorts data in the inputed list
#inputed argument is a list
#output is a sorted list by the last column
while lista:
minimum = lista[1][3]   
for row in lista:
for column in row[1:]:
if column[3] < minimum:
minimum = column
listAnalyzedSort.append(minimum)
lista.remove(minimum)
return listAnalyzedSort
sortData(list_2)

它给了我一个错误

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
C:UsersJONATH~1.COLAppDataLocalTemp/ipykernel_10168/956311210.py in <module>
18         return listAnalyzedSort
19 
---> 20 sortData(list_2)
C:UsersJONATH~1.COLAppDataLocalTemp/ipykernel_10168/956311210.py in sortData(lista)
12         for row in lista:
13             for column in row[1:]:
---> 14                 if column[3] < minimum:
15                     minimum = column
16                     listAnalyzedSort.append(minimum)
TypeError: 'int' object is not subscriptable
``

只需排除第一个条目,然后对其余条目进行排序,稍后只需将第一个国家添加到结果中

lista = [['countries', 2019, 2020, 2025],['aruba', 2,2,1],['barbados', 2,2,2],['japan', 2,2,3]]
sortedout = sorted(lista[1:],key=lambda x:x[-1], reverse=True)
out = [lista[0]]+sortedout
print(out)

输出将是

[['countries', 2019, 2020, 2025], ['japan', 2, 2, 3], ['barbados', 2, 2, 2], ['aruba', 2, 2, 1]]

只从索引1的元素开始对列表进行排序,并使用检索内部列表最后一个元素的键函数。然后将这个新的排序列表添加到索引0处的元素中。

lista = [['countries', 2019, 2020, 2025],['japan', 2,2,3],['barbados', 2,2,2],['aruba', 2,2,1]]
result = lista[0] + sorted(lista[1:], key=lambda x: x[-1])
print(result)

这将为您提供['countries', 2019, 2020, 2025, ['aruba', 2, 2, 1], ['barbados', 2, 2, 2], ['japan', 2, 2, 3]]

在这里,您将找到与您的方法类似的解决方案。

def sortData(lista):
listAnalyzedSort = lista[:2]
del lista[:2]
for row in lista:
max = 1
for idx, ele in enumerate(listAnalyzedSort[1:]):
if row[3] < ele[3]:
max = idx + 1
listAnalyzedSort.insert(max, row)

return listAnalyzedSort

请注意,它试图遵循您的逻辑,将给定行的第三个元素与结果列表中每行的第二个元素进行比较,然后在适当的位置插入给定行。

返回:[['countries', 2019, 2020, 2025], ['barbados', 2, 2, 3], ['japan', 2, 2, 5], ['aruba', 2, 2, 9]]

最新更新