@bzupnick, uso key=lambda x:x[2].casefold(). Si su Python no es lo suficientemente nuevo, simplemente use en .lower()lugar de.casefold()
John La Rooy
x = [[[5,3], 1.0345], [[5,6], 5.098], [[5,4], 4.89], [[5,1], 5.97]] Con una lista como esta se puede Clasificamos usando itemgetter () con respecto a los elementos en x [0] [1]?
nidHi
¿Puedo obtener también los índices del tipo, para ordenar otra lista de listas relacionadas en el mismo orden?
Quarky
@quaryk Parece una pregunta interesante, pero no es adecuada para responder en los comentarios. Si no puede encontrar una pregunta que la cubra, debe crear una.
John La Rooy el
175
en su lugar
>>> l =[[0,1,'f'],[4,2,'t'],[9,4,'afsd']]>>> l.sort(key=lambda x: x[2])
¿Podría dar más detalles sobre in placey not in place?
qun
99
@qun, "en el lugar" significa que la memoria de la lista anterior se reutiliza para la ordenada. "no en su lugar" significa que la lista anterior permanece sin cambios y se crea una nueva lista.
John La Rooy
x = [[[5,3], 1.0345], [[5,6], 5.098], [[5,4], 4.89], [[5,1], 5.97]] Con una lista como esta es, ¿Cómo podemos ordenar con respecto a los elementos en x [0] [1]?
nidHi
81
Itemgetter le permite ordenar por múltiples criterios / columnas:
Creo que esta respuesta es muy importante. Creo que las personas que intentan ordenar por índices de matriz interna caerán aquí, pero las personas que buscan ordenar por ÍNDICES de matriz interna MÚLTIPLES comenzarán aquí y su respuesta me ayudó a ver que ¡itemgetter realmente hará eso por usted!
ZekeDroid
11
múltiples criterios también se pueden implementar a través de la función lambda
Creo que la función lambda puede resolver su 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])**
corrígeme si estoy equivocado pero ¿no es la 'x [2]' que llama al tercer elemento de la lista, no al tercer elemento de la lista anidada? debería ser x [2] [2]?
No, porque key / lambda ya está iterando sobre los elementos en la lista de primer nivel. x es una variable local vinculada a cada elemento a su vez.
DragonLord
1
Más fácil de entender (¿Qué está haciendo realmente Lambda?):
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)
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)
Respuestas:
Este es un trabajo para itemgetter
También es posible usar una función lambda aquí, sin embargo, la función lambda es más lenta en este caso simple
fuente
key=lambda x:x[2].casefold()
. Si su Python no es lo suficientemente nuevo, simplemente use en.lower()
lugar de.casefold()
en su lugar
no en su lugar usando ordenado:
fuente
in place
ynot in place
?Itemgetter le permite ordenar por múltiples criterios / columnas:
fuente
múltiples criterios también se pueden implementar a través de la función lambda
fuente
Puede ordenar fácilmente con este fragmento, donde 1 es el índice del elemento.
fuente
Me gusta esto:
fuente
Creo que la función lambda puede resolver su problema.
fuente
corrígeme si estoy equivocado pero ¿no es la 'x [2]' que llama al tercer elemento de la lista, no al tercer elemento de la lista anidada? debería ser x [2] [2]?
fuente
Más fácil de entender (¿Qué está haciendo realmente Lambda?):
fuente
Ordenar una matriz multidimensional ejecutar aquí
fuente