Comment utiliser Python pour obtenir le nouvel index après avoir trié une liste désordonnée

WBOY
Libérer: 2023-05-09 23:05:28
avant
1798 Les gens l'ont consulté

Pour une liste, le tri est très simple. Pour le tri direct (de petit à grand), utilisez

list.sort()
Copier après la connexion

Pour le tri inverse (de grand à petit), utilisez

list.sort(reverse=True)
Copier après la connexion

Mais si vous n'êtes pas limité à obtenir une liste triée, mais que vous souhaitez également enregistrer les indices d'origine. , puis pour un numpy.array Par exemple, vous pouvez utiliser

np.argsort()
Copier après la connexion

Par exemple, [1,3,2,5,6]

Après le tri, cela devient [1,2,3,5,6]

Mais nous voulons savoir que le résultat trié correspond à l'original Quel est l'indice (la réponse est [0,2,1,3,4]), vous pouvez utiliser np.argsort()

Mais si c'est un simple liste et vous souhaitez obtenir cet effet, vous pouvez utiliser

# enumerate(x)会自动构造一个tuple(a,b)
# 其中a是index,b是list里index下标对应的具体的值,后面的x是代表一个虚拟变量,即tuple(a,b)
sorted_list = sorted(enumerate(list), key=lambda x:x[1])  # x[1]是因为在enumerate(a)中,a数值在第1位
result = [x[0] for x in sorted_list]
Copier après la connexion

comme ceci Le résultat renvoyé est l'index d'origine

Si vous souhaitez implémenter ce qu'il y a dans le titre, allez plus loin, c'est-à-dire que vous voulez obtenir un nouvel indice après avoir trié la liste. Par exemple, pour [1,5,2,8,3,4], vous devriez obtenir [ 0,4,1,5,2,3]

Ensuite, vous pouvez l'utiliser

# enumerate(x)会自动构造一个tuple(a,b)
# 其中a是index,b是list里index下标对应的具体的值,后面的x是代表一个虚拟变量,即tuple(a,b)
# sorted_list = [(0,1),(2,2),(4,3),(5,4),(1,5),(3,8)]
sorted_list = sorted(enumerate(list), key=lambda x:x[1])  # x[1]是因为在enumerate(a)中,a数值在第1位
for i in range(len(sorted_list)):
    list[sorted_list[i][1]] = i
Copier après la connexion
.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal