Sorting two arrays on one of them

Easy problem, I guess, but I can’t work it out.
I have got an array X of data : n lines (objects) and m columns (dimension of the objects) and a list y of n labels, one for each object. How can I sort both X and y on the values of y ?

We can use the Decorate/Sort/Undecorate pattern. In this case, we need to decorate the entries of X with the entries of y. We can use zip() for that. Then sort, and finally remove the decorations.

# Untested.
decorated = list(zip(y, X))
X = [b for (a, b) in decorated]

We can make that a one-liner, and over-write X instead of replacing it:

X[:] = [b for (a, b) in sorted(zip(y, X))]