es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué el método set() de Python ordena una lista en algunos casos?

Estoy confundido/a por el comportamiento de set() en Python en este ejemplo:

random_number_list = [randint(1, 10) for _ in range(10)]

<h1>¡Esto estará ordenado!</h1>

unique_numbers = set(random_number_list)

print(
    f"Lista de números aleatorios/ números únicos con el mismo límite superior para randint() y range():\n{random_number_list=}\n{unique_numbers=}\n"
)

random_number_list = [randint(1, 100) for _ in range(10)]

<h1>Esto no estará ordenado.</h1>

unique_numbers = set(random_number_list)

print(
    f"Lista de números aleatorios/ números únicos con límite superior diferente para randint() y range():\n{random_number_list=}\n{unique_numbers=}\n"
)

Parece que set() está ordenando la lista random_number_list si la longitud de la lista y el límite superior de randint() son iguales:

➜  ch-2 python --version
Python 3.10.0
➜  ch-2 python find_k_smallest.py 
Lista de números aleatorios/ números únicos con el mismo límite superior para randint() y range():
random_number_list=[10, 1, 2, 5, 5, 7, 8, 8, 2, 8]
unique_numbers={1, 2, 5, 7, 8, 10}

Lista de números aleatorios/ números únicos con límite superior diferente para randint() y range():
random_number_list=[35, 1, 17, 26, 17, 74, 26, 11, 44, 13]
unique_numbers={1, 35, 74, 11, 44, 13, 17, 26}

La documentación dice:

Un objeto de tipo set es una colección desordenada de objetos hashables y distintos.

¿Qué está sucediendo aquí? ¿Por qué set() ordena la lista random_number_list en algunos casos y en otros no?

Editar Ninguna de estas preguntas aborda mi problema:

  • https://stackoverflow.com/questions/63845073/my-python-multiprocesses-are-apparently-not-independent/64866191#64866191
  • https://stackoverflow.com/questions/1653970/does-python-have-an-ordered-set
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La función set() en Python no garantiza ningún orden específico para sus elementos. Sin embargo, en este ejemplo específico, parece que set() está ordenando la lista random_number_list cuando la longitud de la lista y el límite superior de randint() son iguales. Esto se debe a que cuando el límite superior de randint() es igual a la longitud de la lista, no habrá duplicados en la lista y set() ordena los elementos de forma ascendente en este caso. Cuando el límite superior de randint() es mayor que la longitud de la lista, hay una mayor probabilidad de que haya duplicados, y set() no necesariamente ordena los elementos.

    En resumen, el comportamiento de set() en cuanto al ordenamiento de sus elementos no está garantizado y no está relacionado específicamente con el uso de random, list o set. Simplemente sucede que es coincidente en este ejemplo en particular.

Comments are closed.