Ho due liste: una contiene un insieme di punti x, l'altra contiene punti y. Python in qualche modo riesce a mescolare i punti x, o l'utente potrebbe. Avrei bisogno di ordinarli dal più basso al più alto e spostare i punti y per seguire i corrispondenti x. Sono in due liste separate .. come faccio?Python: ordina una lista e modifica un'altra di conseguenza
risposta
È possibile comprimere gli elenchi e ordinare il risultato. Le tuple di ordinamento dovrebbero, per impostazione predefinita, ordinare sul primo membro.
>>> 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)]
E poi decomprimerli nuovamente:
>>> 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]
Se i xe y sono destinate ad essere una singola unità (ad esempio un punto), si avrebbe più senso per memorizzarli come tuple anziché due liste separate.
Indipendentemente da ciò, ecco che cosa si dovrebbe fare:
x = [4, 2, 5, 4, 5,…]
y = [4, 5, 2, 3, 1,…]
zipped_list = zip(x,y)
sorted_list = sorted(zipped_list)
lo farei, ma matplotlib usa liste come quella –
>>> 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)
Probabilmente non vuoi usare 'zip (* ordinato (...))' se hai un gran numero di elementi. L'argomento -unpacking '*' non può fare le cose con la stessa efficienza di 'zip (xs, ys)', dato che deve passare tanti argomenti quante sono le tuple nella lista. –
>>> import numpy
>>> sorted_index = numpy.argsort(xs)
>>> xs = [xs[i] for i in sorted_index]
>>> ys = [ys[i] for i in sorted_index]
se si può lavorare 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]
è possibile combinare in modo sicuro le ultime 2 righe come 'xs, ys = [v [sorted_index] per v in [xs, ys]]'? –
- 1. Ordina una lista di puntatori
- 2. linq Ordina per una lista (di myObjects)
- 3. Ordina una lista per ordine di un'altra lista
- 4. Redis: Come fare il parsing di conseguenza lista
- 5. Ordina una lista per più attributi?
- 6. Ordina in lista di oggetti
- 7. SQL - ordina per lista
- 8. Ordina una lista html con javascript
- 9. Come si ordina una lista in Jinja2?
- 10. Java: Ordina una lista non modificabile
- 11. Ordina una lista di tuple seconda due elementi
- 12. Ordina lista generica
- 13. ordina una lista di oggetti basata sulla proprietà di runtime
- 14. Python Ordina ultimi caratteri
- 15. Ordina una lista di tuple di 2 ° voce (valore intero)
- 16. Python Ordinamento personalizzato funzione per una lista
- 17. Python list.extend() Ordina Presserving?
- 18. Selezione Ordina Python
- 19. Ordina lista di oggetti da proprietà C#
- 20. Ordina lista di stringhe di data
- 21. Ordina una lista di elementi non banali in R
- 22. Ordina una lista di tuple con i loro secondi elementi
- 23. Unire alcuni elementi di una lista in una lista Python
- 24. Python trasformare una lista in una lista di tuple
- 25. Python di lista
- 26. Ordina elenco python per funzione
- 27. C# Ordina e ordina dal confronto
- 28. Confusione di oggetti Python: a = b, modifica di b e una modifica!
- 29. Ordina una lista in base ai valori del dizionario in python?
- 30. Ordina una query Lista <T> utilizzando espressioni
grazie! è fantastico! –
Oppure, mantenere i punti associati correttamente non avendo due elenchi separati, ma mantenendo l'elenco di tuple. –
Leggi la risposta di Mike Graham. Puoi anche usare 'zip' per decomprimere le tuple. –