Barajar números a veces puede resultar de gran ayuda durante las prácticas de programación. Este proceso se puede implementar directamente en las estructuras de datos que son mutables como las listas, pero como sabemos que las tuplas son inmutables, no se pueden barajar directamente. Si intenta hacerlo como se hace en el siguiente código, se generará un error. Veamos el siguiente ejemplo.
Python3
import random # Initializing tuple t = (1,2,3,4,5) # Trying to shuffle using random.shuffle random.shuffle(t)
Producción:
TypeError: 'tuple' object does not support item assignment
Entonces, ¿cómo proceder? Entonces, hay dos formas de barajar la tupla, y se mencionan a continuación:
Método #1: Encasillamiento
Este es un método simple para barajar en tuplas. Puede encasillar las tuplas en una lista y luego realizar operaciones de barajado realizadas en la lista y luego encasillar esa lista nuevamente en la tupla. Una forma es usar random.shuffle().
Python3
# Python3 code to demonstrate # shuffle a tuple # using random.shuffle() import random # initializing tuple tup = (1,2,3,4,5) # Printing original tuple print("The original tuple is : " + str(tup)) # Conversion to list l = list(tup) # using random.shuffle() # to shuffle a list random.shuffle(l) # Converting back to tuple tup = tuple(l) # Printing shuffled tuple print ("The shuffled tuple is : " + str(tup))
Producción:
The original tuple is: (1, 2, 3, 4, 5) The shuffled tuple is: (2, 3, 4, 1, 5)
Método #2: Usando random.sample()
random.sample() crea un nuevo objeto e incluso si se pasa una tupla como primer argumento, devuelve una lista, por lo que, como último paso, es obligatorio volver a convertir la lista en la tupla para obtener una tupla mezclada como salida.
Python3
# Python3 code to demonstrate # shuffle a tuple # using random.sample() import random # initializing tuple tup = (1,2,3,4,5) # Printing original tuple print("The original tuple is : " + str(tup)) # Using random.sample(), passing the tuple and # the length of the datastructure as arguments # and converting it back to tuple. tup = tuple(random.sample(t, len(t))) # Printing shuffled tuple print ("The shuffled tuple is : " + str(tup))
Producción:
The original tuple is: (1, 2, 3, 4, 5) The shuffled tuple is: (1, 5, 3, 2, 4)