2010-05-18 15 views

Respuesta

25

No, es no al azar. Está "ordenado arbitrariamente", lo que significa que no puede depender de que esté ordenado o sea aleatorio.

+3

Es importante entender la diferencia entre "indefinido" y "al azar". –

+7

De hecho, el orden es predecible a partir de las ID de los diversos objetos en el conjunto. Está bastante rigurosamente definido por el código. PERO - bonificación - los detalles no son de su incumbencia, por lo que son "arbitrarios" y "específicos de la implementación" y "poco confiables para cualquier cosa". Y "indefinido en cuanto a lo que se te permite cuidar". –

+0

OK. La función hash determinará el orden. Por ejemplo, para los elementos enteros obtendremos el orden natural. Entonces, llego a la conclusión de que tendremos un orden "indefinido", "arbitrario" y "repetible" para el mismo conjunto de elementos. – Chuim

4

No, no puede confiar en ello para ningún propósito estadístico real. La implementación de conjuntos en Python es en términos de una tabla hash, y puede hacer que la distribución de elementos muestre algunas propiedades muy no aleatorias. Hay una gran brecha entre "no tener una orden garantizada" y "garantizada para ser desordenada de manera uniforme y aleatoria".

Use random.shuffle to really elementos aleatorios de una secuencia.

+0

La cosa es 'random.shuffle' solo se puede usar para secuencias, lo que no es un' set'. Uno puede convertirlo en una "lista" pero para un gran número de elementos y un código sensible al rendimiento puede ser un problema ... – Chuim

3

En una palabra, no:

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

De acuerdo, hice pruebas similares y obtuve estos resultados. – Chuim

4

La arbitrariedad es central en el diseño de programas, cada una de estas libertades que reserve es como un comodín que puede utilizar al implementar, desarrollar, o reescritura tu programa Cuantas más tarjetas gratuitas recaben, mayor será la eficacia de tu código (probablemente), ya que tienes más libertad para cambiarlo.

No es aleatorio, es solo libertad. Si es un conjunto mejor de esa manera, el pedido puede adelantarse los miércoles y "retrasarse" los viernes.

+0

¡Respuesta "Zen"! ;) – Chuim

0

Solo una nota sobre el rigor de la orden. Parece que es muy poco confiable incluso en el mismo entorno de ejecución.

Por ejemplo este código da diferentes respuestas:

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

enter image description here

Cuestiones relacionadas