Python 如何按内部列表的特定索引对列表进行排序?

Python 如何按内部列表的特定索引对列表进行排序?,python,sorting,Python,Sorting,我有一份清单。比如说, [ [0,1,'f'], [4,2,'t'], [9,4,'afsd'] ] 如果我想按内部列表的字符串字段对外部列表进行排序,您会如何在python中进行排序 这里也可以使用lambda函数,但是在这种简单的情况下,lambda函数的速度较慢 >>> l = [[0, 1, 'f'], [4, 2, 't'], [9, 4, 'afsd']] >>> l.sort(key=lambda x: x[2]) 未使用已排序的: >

我有一份清单。比如说,

[
[0,1,'f'],
[4,2,'t'],
[9,4,'afsd']
]
如果我想按内部列表的字符串字段对外部列表进行排序,您会如何在python中进行排序

这里也可以使用lambda函数,但是在这种简单的情况下,lambda函数的速度较慢

>>> l = [[0, 1, 'f'], [4, 2, 't'], [9, 4, 'afsd']]
>>> l.sort(key=lambda x: x[2])
未使用已排序的:

>>> sorted(l, key=lambda x: x[2])
像这样:

import operator
l = [...]
sorted_list = sorted(l, key=operator.itemgetter(desired_item_index))

Itemgetter允许您按多个条件/列进行排序:

sorted_list = sorted(list_to_sort, key=itemgetter(2,0,1))

也可以通过lambda函数实现多个标准

sorted_list = sorted(list_to_sort, key=lambda x: (x[1], x[0]))

我认为lambda函数可以解决你的问题

old_list = [[0,1,'f'], [4,2,'t'],[9,4,'afsd']]

#let's assume we want to sort lists by last value ( old_list[2] )
new_list = sorted(old_list, key=lambda x: x[2])

#Resulst of new_list will be:

[[9, 4, 'afsd'], [0, 1, 'f'], [4, 2, 't']]
您可以使用此代码段轻松排序,其中1是元素的索引。

更容易理解(Lambda实际上在做什么):


如果我错了,请纠正我,但是“x[2]”不是调用列表中的第三项,而是调用嵌套列表中的第三项吗?是否应该是x[2][2]

对多维数组排序


确保要排序的列表中没有任何null或NaN值。如果存在NaN值,则排序将关闭,从而影响非空值的排序


查看教程的链接:有用链接:如果我想忽略大小写怎么办?@bzupnick,使用
key=lambda x:x[2]。casefold()
。如果您的Python不够新,只需使用
.lower()
而不是
.casefold()
x=[[5,3],1.0345],[5,6],5.098],[5,4],4.89],[5,1],5.97]]这样的列表,我们可以使用itemgetter()对x[0][1]中的元素进行排序吗?我还可以得到排序的索引,那么,是否要按相同的顺序对另一个相关列表进行排序?@quaryk这听起来是一个有趣的问题,但不适合在评论中回答。如果你找不到一个涵盖它的问题,你应该创建一个。我认为这个答案非常重要。我认为尝试按内部数组索引排序的人将落在这里,但希望按多个内部数组索引排序的人将从这里开始,您的回答帮助我看到itemgetter实际上会为您这样做!你能提供更多关于
就地
不就地
的详细信息吗?@qun,“就地”意味着旧列表的内存被重新用于已排序的列表。“未就位”表示旧列表保持不变,并创建一个新列表。x=[[5,3],1.0345],[5,6],5.098],[5,4],4.89],[5,1],5.97]]对于这样的列表,我们如何按照x[0][1]中的元素进行排序?降序:
l.sort(key=lambda x:x[2],reverse=True)
No,因为key/lambda已经在迭代第一级列表中的项。x是一个局部变量,依次绑定到每个项。上面这个lambda函数的含义是什么。它是否返回一个元组?
old_list = [[0,1,'f'], [4,2,'t'],[9,4,'afsd']]

#let's assume we want to sort lists by last value ( old_list[2] )
new_list = sorted(old_list, key=lambda x: x[2])

#Resulst of new_list will be:

[[9, 4, 'afsd'], [0, 1, 'f'], [4, 2, 't']]
array.sort(key = lambda x:x[1])
ls2=[[0,1,'f'],[4,2,'t'],[9,4,'afsd']]
def thirdItem(ls):
    #return the third item of the list
    return ls[2]
#Sort according to what the thirdItem function return 
ls2.sort(key=thirdItem)
**old_list = [[0,1,'f'], [4,2,'t'],[9,4,'afsd']]
    #let's assume we want to sort lists by last value ( old_list[2] )
    new_list = sorted(old_list, key=lambda x: x[2])**
arr=[[2,1],[1,2],[3,5],[4,5],[3,1],[5,2],[3,8],[1,9],[1,3]]



arr.sort(key=lambda x:x[0])
la=set([i[0] for i in Points])

for i in la:
    tempres=list()
    for j in arr:
        if j[0]==i:
            tempres.append(j[1])

    for j in sorted(tempres,reverse=True):
        print(i,j)