Вы можете использовать частное (%
) и операторы деления по полу (//
) для определения ключа сортировки:
L = [103, 302, 405, 204, 301, 105, 202, 303, 201, 404]
res = sorted(L, key=lambda x: (x % 10, x // 100))
[201, 301, 202, 302, 103, 303, 204, 404, 105, 405]
Если вы можете использовать стороннюю библиотеку, это более эффективно с NumPy:
import numpy as np
A = np.array([103, 302, 405, 204, 301, 105, 202, 303, 201, 404])
res = A[np.lexsort((A // 100, A % 10))]
array([201, 301, 202, 302, 103, 303, 204, 404, 105, 405])