Produce the index ordering that would sort a 6-element list. The naive version builds (value, index) pairs, sorts them, then extracts the indices — keeping the sort structure visible without a nested loop. The replay shows pairs growing, then reordering in one step, then order filling with the extracted indices.

By hand

With NumPy

np.argsort(a) returns an array of integer indices such that a[indices] gives a in ascending order.

naive.py
values = [3, 1, 4, 2, 5, 0]
pairs = []
for i in range(len(values)):
    pairs.append([values[i], i])
pairs.sort()
order = []
for p in pairs:
    order.append(p[1])
print('RESULT:', order)
library.py
import numpy as np

values = [3, 1, 4, 2, 5, 0]
a = np.array(values)
result = np.argsort(a)
print('a: shape:', a.shape, 'dtype:', a.dtype, 'values:', a.tolist())
print('result: shape:', result.shape, 'dtype:', result.dtype, 'values:', result.tolist())
print('RESULT:', result.tolist())
a: shape: (6,) dtype: int64 values: [3, 1, 4, 2, 5, 0]
result: shape: (6,) dtype: int64 values: [5, 1, 3, 0, 2, 4]
RESULT: [5, 1, 3, 0, 2, 4]

Implementation notes

  • Verify: a[[5, 1, 3, 0, 2, 4]] = [0, 1, 2, 3, 4, 5] — applying the argsort indices to a yields the sorted values (see fancy-index for index-array selection).
  • Argsort is useful to reorder a parallel array: if names and scores share the same positional index, argsort(scores) gives the index order to sort names by score without losing alignment.
  • For the rank-assignment pattern (each element gets its sorted rank) see rank-assign in the python-data-basics book.
  • Shape, dtype, and values are shown explicitly here because ndarray.__repr__ output varies with NumPy version and print options.