Essentiellement, vous devez faire une argsort, quelle implémentation dont vous avez besoin dépend si vous voulez utiliser des bibliothèques externes (par exemple NumPy) ou si vous voulez rester pure-Python sans dépendances.
La question que vous devez vous poser est la suivante: voulez-vous
- indices qui trieraient le tableau / la liste
 
- indices que les éléments auraient dans le tableau / liste trié
 
Malheureusement, l'exemple de la question ne précise pas ce qui est souhaité car les deux donneront le même résultat:
>>> arr = np.array([1, 2, 3, 100, 5])
>>> np.argsort(np.argsort(arr))
array([0, 1, 2, 4, 3], dtype=int64)
>>> np.argsort(arr)
array([0, 1, 2, 4, 3], dtype=int64)
Choisir le argsort implémentation
Si vous avez NumPy à votre disposition, vous pouvez simplement utiliser la fonction numpy.argsortou la méthode numpy.ndarray.argsort.
Une implémentation sans NumPy a déjà été mentionnée dans certaines autres réponses, je vais donc récapituler la solution la plus rapide en fonction de la réponse de référence ici 
def argsort(l):
    return sorted(range(len(l)), key=l.__getitem__)
Obtenir les indices qui trieraient le tableau / la liste
Pour obtenir les indices qui trieraient le tableau / la liste, vous pouvez simplement appeler argsortle tableau ou la liste. J'utilise les versions de NumPy ici mais l'implémentation Python devrait donner les mêmes résultats
>>> arr = np.array([3, 1, 2, 4])
>>> np.argsort(arr)
array([1, 2, 0, 3], dtype=int64)
Le résultat contient les indices nécessaires pour obtenir le tableau trié.
Puisque le tableau trié serait [1, 2, 3, 4]le tableau argsorted contient les indices de ces éléments dans l'original.
- La plus petite valeur est 
1et elle est à l'index 1dans l'original, donc le premier élément du résultat est1 . 
- Le 
2est à l'index 2dans l'original donc le deuxième élément du résultat est 2. 
- Le 
3est à l'index 0dans l'original, donc le troisième élément du résultat est 0. 
- La plus grande valeur 
4et elle est à l'index 3dans l'original, donc le dernier élément du résultat est 3. 
Obtention des indices que les éléments auraient dans le tableau / liste trié
Dans ce cas, vous devrez postuler argsort deux fois :
>>> arr = np.array([3, 1, 2, 4])
>>> np.argsort(np.argsort(arr))
array([2, 0, 1, 3], dtype=int64)
Dans ce cas :
- le premier élément de l'original est 
3, qui est la troisième plus grande valeur de sorte qu'il aurait un index 2dans le tableau / liste trié de sorte que le premier élément est2 . 
- le deuxième élément de l'original est 
1, qui est la plus petite valeur pour qu'il ait un index 0dans le tableau / liste trié, de sorte que le deuxième élément l'est 0. 
- le troisième élément de l'original est 
2, qui est la deuxième plus petite valeur, de sorte qu'il aurait un index 1dans le tableau / liste trié, de sorte que le troisième élément l'est 1. 
- le quatrième élément de l'original est 
4la valeur la plus élevée, il aurait donc un index 3dans le tableau / la liste trié, de sorte que le dernier élément l'est 3.