Mezclar una array en Python

Barajar una secuencia de números siempre ha sido una utilidad útil, no es más que reorganizar los elementos en una array. Conocer más de un método para conseguirlo siempre puede ser un plus. Analicemos ciertas formas en que esto se puede lograr.

Método 1: En este método usamos el método shuffle() de la biblioteca numpy

Python3

# Import required module
import numpy as np
 
# Assign array
arr = np.array([1, 2, 3, 4, 5, 6])
 
# Display original array
print("Original array: ", arr)
 
# Shuffle array
np.random.shuffle(arr)
 
# Display shuffled array
print("Shuffled array: ", arr)

Producción

Original array:  [1 2 3 4 5 6]
Shuffled array:  [4 1 5 3 2 6]

Método 2: En este método usaremos el método shuffle() de la biblioteca Random para mezclar la array dada.

Python3

# Import required module
import random
import array
 
# Assign array
arr = np.array([1, 2, 3, 4, 5, 6])
 
# Display original array
print("Original array: ", arr)
 
# Shuffle array
random.shuffle(arr)
 
# Display shuffled array
print("Shuffled array: ", arr)

Producción:

Original array:  [1 2 3 4 5 6]
Shuffled array:  [4 5 2 6 1 3]

Método 3: En este método usaremos el método sample() de la biblioteca aleatoria para mezclar la array dada.

Python3

# Import required module
import random
import array
 
# Assign array
# here q indicates that the array
# contains signed integer
arr = array.array('q', [1, 2, 3, 4, 5, 6])
 
# Display original array
print("Original array: ", arr)
 
# Shuffle array
# Here sample() returns a list, so we
# are typecasting list into array
arr = array.array('q', random.sample(list(arr), 6))
 
# Display shuffled array
print("Shuffled array: ", arr)

Producción:

Original array:  array('q', [1, 2, 3, 4, 5, 6])
Shuffled array:  array('q', [6, 3, 2, 1, 5, 4])

Método 4: en este método, seleccionaremos 2 índices al azar y luego los intercambiaremos. Este proceso se repetirá aleatoriamente hasta n/2 an veces, donde n es la longitud de la array.

Python3

# Import required module
import random
import array
 
 
 
# Create class to shuffle array
class Shuffler(object):
 
    # Constructor
    def __init__(self, arr):
 
        # Initializes the temp_array
        self.temp_array = arr
 
        # All the indices are stored in indices list
        self.indices = [index for index in range(len(arr))]
 
    # method to shuffle array
    def shuffle(self):
 
        # if length of array is zero empty array is returned.
        if not len(self.temp_array):
            return []
 
        # The below swapping process is repeated randomly in range of
        # half of length of array to length of the array, in this case,
        # it is repeated randomly in between 3 to 6 times.
        for i in range(random.randint(int(len(self.temp_array)/2), len(self.temp_array))):
 
            # randomly choses two indices that is i, j from indices list
            i = random.choice(self.indices)
            j = random.choice(self.indices)
 
            # swapping the elements present at i,j indices.
            self.temp_array[i], self.temp_array[j] = self.temp_array[j], self.temp_array[i]
        return self.temp_array
 
 
 
# Driver code
 
# Assign array
arr = array.array('q', [1, 2, 3, 4, 5, 6])
 
# Create Object of Shuffler class
ob = Shuffler(arr)
 
# Display original array
print("Original array: ", arr)
 
# Shuffle method is called
print("Shuffled array: ", ob.shuffle())

Producción:

Original array:  array('q', [1, 2, 3, 4, 5, 6])
Shuffled array:  array('q', [1, 6, 3, 2, 4, 5])

Método 5: Este es uno de los métodos más eficientes, es el Algoritmo aleatorio de Fisher-Yates . El siguiente programa lo ayudará a comprender este algoritmo.

Python3

# Import required module
import random
import numpy as np
 
 
# A function to generate a random
# permutation of array
def shuffler (arr, n):
     
    # We will Start from the last element
    # and swap one by one.
    for i in range(n-1,0,-1):
         
        # Pick a random index from 0 to i
        j = random.randint(0,i+1)
         
        # Swap arr[i] with the element at random index
        arr[i],arr[j] = arr[j],arr[i]
    return arr
 
   
   
# Driver code
     
# Assign array
arr = np.array([1, 2, 3, 4, 5, 6])
 
# Display original array
print("Original array: ",arr)
 
# Get length of array
n = len(arr)
 
# Use shuffler() function to get shuffled array
print("Shuffled array: ",shuffler(arr, n))

Producción:

Original array:  [1 2 3 4 5 6]
Shuffled array:  [6 1 2 3 4 5]

Método 6:

En este método, seleccionaremos aleatoriamente un índice y lo agregaremos al final de la array. esto se repetirá durante n tiempo donde n es la longitud de la array.

Python3

import random
 
arr=[1,2,3,4,5,6]
n=len(arr)-1
for i in range(n):
    random_index = random.randint(0, n)
    temp = arr.pop(random_index)
    arr.append(temp)
print(arr)
Producción

[2, 3, 6, 1, 5, 4]

Publicación traducida automáticamente

Artículo escrito por pulamolusaimohan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *