Non, set
sont toujours non ordonnées.
Vous pouvez le vérifier en affichant simplement un set
qui devrait avoir un "ordre de hachage bien défini" 1 pour s'assurer que nous ne recevons pas accidentellement une set
qui semble ordonné mais qui ne l'est pas :
>>> a_set = {3,2,1}
>>> a_set
{1, 2, 3}
>>> list(a_set)
[1, 2, 3]
Si elle était commandée, vous vous attendriez à {3, 2, 1}
y [3, 2, 1]
à la suite de ces exemples.
Alors que dict
sont en fait ordonnés (même exemple légèrement modifié) :
>>> a_dict = {3: 3, 2: 2, 1:1}
>>> a_dict
{3: 3, 2: 2, 1: 1}
>>> list(a_dict)
[3, 2, 1]
1 "ordre de hachage bien défini" :
Pour les entiers qui satisfont 0 <= integer < sys.hash_info.modulus
le site hash
est juste le nombre lui-même. Cela signifie que si l'ensemble est ordonné "sur la base" du hachage (et non sur la base du "temps" d'insertion) et que les valeurs de hachage n'entrent pas en collision (c'est pourquoi j'ai utilisé des petits nombres et des nombres qui ne diffèrent que d'un seul), l'ordre devrait être déterministe parce qu'ils occupent des emplacements dans l'ensemble qui sont proches les uns des autres :
- Soit du plus petit au plus grand
- ou d'une valeur spécifique à la plus élevée, puis de la plus petite à la valeur spécifique. Ce cas se produit si l'emplacement libre suivant (au sens de voisin) dans le jeu est le premier.
A titre d'exemple pour ce dernier point :
>>> a_set = {6,7,8,9}
>>> a_set
{8, 9, 6, 7}
0 votes
@byxor Vous ne devez pas dépendre de au hasard ordre, les ensembles sont arbitrairement ordonné mais loin d'être aléatoire en raison du hachage
0 votes
Si vous êtes intéressé par pourquoi les ensembles ne sont pas ordonnés par insertion, voir Pourquoi les ensembles Python ne préservent-ils pas l'ordre d'insertion ?