Tengo dos listas: una contiene un conjunto de x puntos, la otra contiene y puntos. Python de alguna manera logra mezclar los puntos x, o el usuario podría. Tendría que ordenarlos de menor a mayor, y mover los puntos y para seguir a sus x corresponsales. Están en dos listas separadas ... ¿cómo lo hago?Python: clasifique una lista y cambie otra por consiguiente
Respuesta
Puede comprimir las listas y ordenar el resultado. La ordenación de tuplas debe, por defecto, clasificar al primer miembro.
>>> xs = [3,2,1]
>>> ys = [1,2,3]
>>> points = zip(xs,ys)
>>> points
[(3, 1), (2, 2), (1, 3)]
>>> sorted(points)
[(1, 3), (2, 2), (3, 1)]
Y luego para desempaquetar de nuevo:
>>> sorted_points = sorted(points)
>>> new_xs = [point[0] for point in sorted_points]
>>> new_ys = [point[1] for point in sorted_points]
>>> new_xs
[1, 2, 3]
>>> new_ys
[3, 2, 1]
Si las X y las Y están destinados a ser una sola unidad (como un punto), que tendría más sentido para almacenarlos como tuplas en lugar de dos listas separadas.
pesar de todo, esto es lo que debe hacer:
x = [4, 2, 5, 4, 5,…]
y = [4, 5, 2, 3, 1,…]
zipped_list = zip(x,y)
sorted_list = sorted(zipped_list)
lo haría, pero matplotlib usa listas como esa –
>>> xs = [5, 2, 1, 4, 6, 3]
>>> ys = [1, 2, 3, 4, 5, 6]
>>> xs, ys = zip(*sorted(zip(xs, ys)))
>>> xs
(1, 2, 3, 4, 5, 6)
>>> ys
(3, 2, 6, 4, 1, 5)
Probablemente no desee usar 'zip (* sorted (...))' si tiene una gran cantidad de elementos. El argumento-desempaquetar '*' no puede hacer cosas tan eficientemente como 'zip (xs, ys)', ya que tiene que pasar tantos argumentos como tuplas tenga en la lista. –
>>> import numpy
>>> sorted_index = numpy.argsort(xs)
>>> xs = [xs[i] for i in sorted_index]
>>> ys = [ys[i] for i in sorted_index]
si se puede trabajar con numpy.array
>>> xs = numpy.array([3,2,1])
>>> xs = numpy.array([1,2,3])
>>> sorted_index = numpy.argsort(xs)
>>> xs = xs[sorted_index]
>>> ys = ys[sorted_index]
¿pueden las 2 últimas líneas combinarse de forma segura como 'xs, ys = [v [sorted_index] para v en [xs, ys]]'? –
- 1. Ordenar una lista por otra
- 2. Clasifique los elementos en una matriz usando Python/NumPy
- 3. En Python, ¿cómo indexo una lista con otra lista?
- 4. Prueba si una lista contiene otra lista con Python
- 5. ¿Cómo inserto una lista en otra lista en python?
- 6. Filtrar una lista por otra lista de C#
- 7. Python: tome el contenido de una lista y añádalo a otra lista
- 8. ¿Cómo asignar una lista a otra en python?
- 9. Python: lista por comprensión y programación funcional
- 10. ¿Cómo ordenar una lista según otra lista?
- 11. Clasifique N números en orden de dígitos
- 12. Python lista por comprensión
- 13. creando una lista por defecto en python
- 14. ¿Cómo se dividen los miembros de una lista por los miembros correspondientes de otra lista en Python?
- 15. Restar los valores en una lista de los valores correspondientes de otra lista - Python
- 16. ordenar una lista en Python usando el resultado de la clasificación de otra lista
- 17. Python - Pasar una función a otra función
- 18. Ordenar una lista por frecuencia de letra en python (orden decreciente)
- 19. Python: dividir cadena por lista de separadores
- 20. Eliminar una lista de objetos de otra lista
- 21. Eliminar elementos de una lista en otra
- 22. clasificar una lista por una propiedad y luego por otro
- 23. ¿Cómo se copia una lista vinculada a otra lista?
- 24. añadir una lista a otra lista en vb.net
- 25. jQuery.sortable. cambie el orden por JS
- 26. Clasificación de lista basada en otra lista
- 27. ¿Cómo hacer una lista genérica igual otra lista genérica
- 28. ¿Agregar una lista a otra lista en java?
- 29. Insertar una lista en otra lista en Redis
- 30. Comprueba y aplica una lista de funciones sobre una lista de valores en Python
gracias! ¡Eso es genial! –
O bien, mantenga los puntos asociados correctamente al no tener dos listas separadas, pero manteniendo la lista de tuplas. –
Lee la respuesta de Mike Graham. También puede usar 'zip' para descomprimir las tuplas. –