2010-05-18 14 views

Répondre

25

Non, c'est pas au hasard. C'est «arbitrairement ordonné», ce qui signifie que vous ne pouvez pas en être tributaire ou aléatoire.

+3

Il est important de comprendre la différence entre "non défini" et "au hasard". –

+7

En effet, l'ordre est prévisible à partir des ID des différents objets de l'ensemble. C'est assez rigoureusement défini par le code. MAIS - bonus - les détails ne sont pas vos affaires, les rendant «arbitraire» et «spécifique à la mise en œuvre» et «indéfendable pour quoi que ce soit». Et "indéfini dans la mesure où vous êtes autorisé à vous en soucier". –

+0

OK. La fonction de hachage déterminera l'ordre. Par exemple, pour les éléments entiers, nous obtiendrons l'ordre naturel. Donc, je conclus que nous aurons un «indéfini», «arbitraire» et «répétable» pour le même ensemble d'éléments. – Chuim

4

Non, vous ne pouvez pas compter sur elle pour un but statistique réel. L'implémentation des ensembles en Python est en termes de table de hachage, et peut amener la distribution des éléments à afficher des propriétés très non aléatoires. Il y a un grand écart entre «ne pas avoir de commande garantie» et «garantie d'être désordonné d'une manière uniforme et aléatoire».

Utilisez random.shuffle à vraiment mélanger les éléments d'une séquence.

+0

La chose 'random.shuffle' ne peut être utilisée que pour des séquences, ce qui n'est pas le cas d'un' set'. On peut le convertir en 'list' mais pour un grand nombre d'éléments et un code sensible à la performance cela peut être un problème ... – Chuim

3

En un mot, pas:

>>> list(set(range(10000))) == list(range(10000)) 
True 
+0

D'accord, j'ai fait moi-même des tests similaires et j'ai obtenu ces résultats. – Chuim

4

Arbitraire est central lors de la conception des programmes, chacun de ces libertés que vous réserve est comme une carte joker que vous pouvez utiliser lorsque vous implémentez, développer ou de récrire votre programme. Plus vous accumulez de ces cartes gratuites, plus vous pouvez tirer d'efficacité de votre code (probablement), puisque vous avez plus de liberté pour le changer.

Ce n'est pas aléatoire, c'est seulement la liberté. Si c'est un meilleur set de cette façon, l'ordre peut être avancé le mercredi et "en arrière" le vendredi.

+0

Haut "Zen" réponse! ;) – Chuim

0

Juste une note sur le rigoureusement de la commande. Il semble que ce soit très peu fiable même dans le même environnement de fonctionnement.

Par exemple, ce code donne des réponses différentes:

data = 'KSRNDOW3GQ' 
chars = set(data) 
print(list(chars)) 

enter image description here