@bzupnick, use key=lambda x:x[2].casefold(). Se o seu Python não for novo o suficiente, use-o em .lower()vez de.casefold()
John La Rooy 29/07
x = [[[5,3], 1,0345], [[5,6], 5,098], [[5,4], 4,89], [[5,1], 5,97]] Com uma lista como essa, pode classificamos usando itemgetter () em relação aos elementos em x [0] [1]?
usar o seguinte comando
Também posso obter os índices da classificação, para classificar outra lista relacionada de listas na mesma ordem?
quarky
@ quaryk Parece uma pergunta interessante, mas não é adequada para responder nos comentários. Se você não encontrar uma pergunta que cubra, crie uma.
John La Rooy
175
no lugar
>>> l =[[0,1,'f'],[4,2,'t'],[9,4,'afsd']]>>> l.sort(key=lambda x: x[2])
Você poderia dar mais detalhes sobre in placee not in place?
Qun
9
@qun, "no lugar" significa que a memória da lista antiga é reutilizada para a lista classificada. "não está no lugar" significa que a lista antiga permanece inalterada e uma nova lista é criada.
John La Rooy
x = [[[5,3], 1,0345], [[5,6], 5,098], [[5,4], 4,89], [[5,1], 5,97]] Com uma lista como esta, como podemos classificar em relação aos elementos em x [0] [1]?
usar o seguinte comando
81
O Itemgetter permite que você classifique por vários critérios / colunas:
Eu acho que essa resposta é muito importante. Eu acho que as pessoas que tentam classificar por índices de matriz interna caem aqui, mas as pessoas que procuram classificar por vários índices de matriz interna começarão aqui e sua resposta me ajudou a ver que o itemgetter realmente fará isso por você!
9114 ZekeDroid
11
vários critérios também podem ser implementados através da função lambda
Eu acho que a função lambda pode resolver seu problema.
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']]
**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])**
corrija-me se estiver errado, mas o 'x [2]' não está chamando o terceiro item da lista, e não o terceiro item da lista aninhada? deveria ser x [2] [2]?
Não, porque key / lambda já está iterando nos itens da lista de primeiro nível. x é uma variável local vinculada a cada item por vez.
DragonLord 6/06
1
Mais fácil de entender (o que o Lambda está realmente fazendo):
ls2=[[0,1,'f'],[4,2,'t'],[9,4,'afsd']]def thirdItem(ls):#return the third item of the listreturn ls[2]#Sort according to what the thirdItem function return
ls2.sort(key=thirdItem)
Classificando uma matriz multidimensional, execute aqui
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 inPoints])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)
Respostas:
Este é um trabalho para o itemgetter
Também é possível usar uma função lambda aqui, no entanto, a função lambda é mais lenta nesse caso simples
fonte
key=lambda x:x[2].casefold()
. Se o seu Python não for novo o suficiente, use-o em.lower()
vez de.casefold()
no lugar
não está no lugar usando classificado:
fonte
in place
enot in place
?O Itemgetter permite que você classifique por vários critérios / colunas:
fonte
vários critérios também podem ser implementados através da função lambda
fonte
Você pode classificar facilmente usando esse trecho, onde 1 é o índice do elemento.
fonte
Como isso:
fonte
Eu acho que a função lambda pode resolver seu problema.
fonte
corrija-me se estiver errado, mas o 'x [2]' não está chamando o terceiro item da lista, e não o terceiro item da lista aninhada? deveria ser x [2] [2]?
fonte
Mais fácil de entender (o que o Lambda está realmente fazendo):
fonte
Classificando uma matriz multidimensional, execute aqui
fonte