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]]
sorted(list, key=lambda x: x[1])
Nota: esto también funciona en la variable de tiempo.