tengo 2d array, dimensión 3x10, y quiero ordenar por valores en la 2da fila, del valor más bajo al más alto, ¿algún consejo útil?cómo ordenar 2d array por fila en python?
Respuesta
Python, per se, no tiene "matriz 2D" - tiene listas (1d) como muebles empotrados, y matrices (1d) en el módulo de biblioteca estándar array. Hay bibliotecas de terceros como numpy
que proporcionan matrices multidimensionales utilizables en Python, pero por supuesto mencionarías esas bibliotecas de terceros si estuvieras usando algunas de ellas, en lugar de solo decir "en Python", ? derecho -)
Así que voy a suponer que por "matriz 2D" se refiere a una lista de listas, tales como:
lol = [ range(10), range(2, 12), range(5, 15) ]
o similares - es decir, una lista con 3 elementos, cada uno el elemento es una lista con 10 elementos, y la "segunda fila" sería la sublista elemento lol[1]
. Sí, muchas suposiciones, pero tu pregunta es tan enloquecedoramente vaga que no hay forma de evitar hacer suposiciones: edita tu Q para aclarar con más precisión y, por ejemplo, si no te gusta la gente que intenta leer tu mente (y probablemente fallando) como actualmente lo hacen imposible de evitar.
Así, bajo estas premisas se puede ordenar cada una de las 3 sublistas en el orden requerido para ordenar la segunda, por ejemplo:
indices = range(10)
indices.sort(key = lol[1].__getitem__)
for i, sublist in enumerate(lol):
lol[i] = [sublist[j] for j in indices]
El enfoque general aquí es para ordenar la gama de índices, a continuación, sólo use ese rango apropiadamente ordenado para reordenar todas las sublistas en juego.
Si realmente tiene un problema diferente, habrá, por supuesto, soluciones diferentes ;-).
Bueno, si estás hablando de listas de python estándar, esto es fácil: mylist[1].sort()
. Por ejemplo:
>>> from random import randint
>>> a_list = [[randint(1,15) for _ in range(10)] for _ in range(3)]
>>> print a_list
[[3, 12, 3, 12, 13, 5, 12, 2, 1, 13], [3, 8, 7, 4, 6, 11, 15, 12, 4, 6], [15, 3, 8, 15, 1, 6, 4, 7, 15, 14]]
>>> a_list[1].sort()
>>> print a_list
[[3, 12, 3, 12, 13, 5, 12, 2, 1, 13], [3, 4, 4, 6, 6, 7, 8, 11, 12, 15], [15, 3, 8, 15, 1, 6, 4, 7, 15, 14]]
¿Cómo es su "matriz 2D"?
Por ejemplo:
>>> a = [
[12, 18, 6, 3],
[ 4, 3, 1, 2],
[15, 8, 9, 6]
]
>>> a.sort(key=lambda x: x[1])
>>> a
[[4, 3, 1, 2],
[15, 8, 9, 6],
[12, 18, 6, 3]]
Pero supongo que usted quiere algo como esto:
>>> a = [
[12, 18, 6, 3],
[ 4, 3, 1, 2],
[15, 8, 9, 6]
]
>>> a = zip(*a)
>>> a.sort(key=lambda x: x[1])
>>> a
[(6, 1, 9),
(3, 2, 6),
(18, 3, 8),
(12, 4, 15)]
>>> a = zip(*a)
>>> a
[(6, 3, 18, 12),
(1, 2, 3, 4),
(9, 6, 8, 15)
]
considerar usar 'itemgetter (1)' en lugar de 'lambda' –
En lugar de utilizar lambda x: x[1]
puede utilizar operator.itemgetter como la clave para el tipo o funciones ordenados. itemgetter (n) crea una función que obtiene el enésimo elemento de una lista.
>>> matrix = [ [4,5,6], [1,2,3], [7,0,9]]
>>> from operator import itemgetter
>>> sorted(matrix, key=itemgetter(1))
[[7, 0, 9], [1, 2, 3], [4, 5, 6]]
Ésta es una pequeña función que escribí para este propósito:
def sorted_table(data, column=0, reverse=False):
return sorted(data, cmp=lambda a,b: cmp(a[column], b[column]), reverse=reverse)
En realidad, tuve requisito un poco más complejo, que consiste en ordenar la tabla por dos columnas. Resulta que la función cmp()
es bastante versátil; este es mi función original:
def sort_report(data):
"""Sort report columns: first by value, then by label."""
return sorted(data, cmp=lambda a,b: cmp(b[2], a[2]) or cmp(a[0], b[0])) # label is column 0; value is column 2
El bya se invierten en el primer caso, ya que el objetivo era ordenar los valores más altos lado a otro para bajar.
- 1. Rotar numpy 2D array
- 2. ¿Cómo puedo ordenar la matriz dentada por fila en C#?
- 3. Ordenar un conjunto numpy 2D por varios ejes
- 4. 2D array de Javascript
- 5. matriz Numpy 2D Resta por fila
- 6. cómo convertir 2d list a 2d numpy array?
- 7. ¿Ordenar una matriz 2D binaria?
- 8. Ordenar un array de objetos
- 9. Python pandas ordenar columna según los valores en una fila
- 10. Ordenar un array usando array_multisort
- 11. Ordenar un array de objetos EmberJS por la propiedad
- 12. Ordenar una matriz de enteros 2D basada en una columna
- 13. 2d array rows/columns length C
- 14. Cómo declarar extern 2d-array en el encabezado?
- 15. Byte Array en Python
- 16. Ordenar un array asociativo en AWK
- 17. Animación 2D en Python
- 18. reducción de openCL, y paso 2d array
- 19. Convertir Hash Map a 2D Array
- 20. Ordenar filas de matriz por otra matriz en Python
- 21. python/numpy: cómo obtener la longitud de la columna 2D array?
- 22. Clasificación: Ordenar un array basado en múltiples condiciones en Ruby
- 23. ¿Cómo for-loop tres columnas por fila en Django/python?
- 24. Convierta 2d numpy array en la lista de listas
- 25. MySQL Ordenar por matemáticas
- 26. Cómo convertir la matriz numpy flotante 2D a 2D int numpy array?
- 27. Ruby obteniendo los elementos diagonales en un 2d Array
- 28. Ordenar una matriz de python/recarray por la columna
- 29. Inicializando matriz 2D en Python
- 30. ¿Es esta una definición válida de Array 2D en C++?
gracias, usted es realmente buen lector de la mente :)))), en el futuro voy a ser más descriptivo y determinado ..mi "pregunta real" fue sobre ordenar sublistas en el orden requerido para el 2º – user257522