una que por ordenar matriz matrices lista hacer filas como columnas columna array argsort python arrays list sorting

python - que - ¿Cómo ordenar matriz multidimensional por columna?



ordenar matriz por columna c++ (5)

¿Hay alguna manera de utilizar el método sort () o cualquier otro método para ordenar una lista por columna? Digamos que tengo la lista:

[ [John,2], [Jim,9], [Jason,1] ]

Y quería ordenarlo para que se vea así:

[ [Jason,1], [John,2], [Jim,9], ]

¿Cuál sería el mejor enfoque para hacer esto?

Editar:

En este momento me encuentro con un error de índice fuera de rango. Tengo una matriz bidimensional que, digamos, 1000 filas por 3 columnas. Quiero ordenarlo según la tercera columna. ¿Es este el código correcto para eso?

sorted_list = sorted(list_not_sorted, key=lambda x:x[2])


El parámetro key opcional para sort / sorted es una función. La función se llama para cada elemento y los valores de retorno determinan el orden del tipo

>>> lst = [[''John'', 2], [''Jim'', 9], [''Jason'', 1]] >>> def my_key_func(item): ... print("The key for {} is {}".format(item, item[1])) ... return item[1] ... >>> sorted(lst, key=my_key_func) The key for [''John'', 2] is 2 The key for [''Jim'', 9] is 9 The key for [''Jason'', 1] is 1 [[''Jason'', 1], [''John'', 2], [''Jim'', 9]]

quitar la print de la función deja

>>> def my_key_func(item): ... return item[1]

Esta función es lo suficientemente simple como para escribir "en línea" como una función lambda

>>> sorted(lst, key=lambda item: item[1]) [[''Jason'', 1], [''John'', 2], [''Jim'', 9]]


Puede usar list.sort con su parámetro de key opcional y una expresión lambda :

>>> lst = [ ... [''John'',2], ... [''Jim'',9], ... [''Jason'',1] ... ] >>> lst.sort(key=lambda x:x[1]) >>> lst [[''Jason'', 1], [''John'', 2], [''Jim'', 9]] >>>

Esto ordenará la lista en el lugar.

Tenga en cuenta que para listas grandes, será más rápido usar operator.itemgetter lugar de un lambda :

>>> from operator import itemgetter >>> lst = [ ... [''John'',2], ... [''Jim'',9], ... [''Jason'',1] ... ] >>> lst.sort(key=itemgetter(1)) >>> lst [[''Jason'', 1], [''John'', 2], [''Jim'', 9]] >>>


Puede usar el método ordenado con una clave.

sorted(a, key=lambda x : x[1])


Sí. El built-in sorted acepta un argumento key :

sorted(li,key=lambda x: x[1]) Out[31]: [[''Jason'', 1], [''John'', 2], [''Jim'', 9]]

tenga en cuenta que sorted devuelve una nueva lista. Si desea ordenar en el lugar, use el método .sort de su lista (que también, convenientemente, acepta un argumento key ).

o alternativamente,

from operator import itemgetter sorted(li,key=itemgetter(1)) Out[33]: [[''Jason'', 1], [''John'', 2], [''Jim'', 9]]

Lea más en la wiki de python .


sorted(list, key=lambda x: x[1])

Nota: esto también funciona en la variable de tiempo.