Saturday, November 16, 2024
Google search engine
HomeLanguagesShuffle an array in Python

Shuffle an array in Python

Shuffling a sequence of numbers have always been a useful utility, it is nothing but rearranging the elements in an array. Knowing more than one method to achieve this can always be a plus. Let’s discuss certain ways in which this can be achieved.

Using shuffle() method from numpy library

Here we are using the shuffle() method from numpy library to shuffle an array in Python.

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)


Output

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

Using shuffle() method from Random library to shuffle the given array.

Here we are using shuffle method from the built-in random module to shuffle the entire array at once.

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)


Output:

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

Using sample() method to shuffle an array

Here we are using the sample method from the random library to shuffle an array.

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)


Output:

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

Selecting random indices and swapping them

In this method we will select 2 indices randomly and then swap them. This process will be randomly repeated up to n/2 to n times, Where n is the length of 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())


Output:

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

Using Fisher-Yates Shuffle Algorithm to shuffle an array

This is the one of the most efficient methods, it is the Fisher–Yates shuffle Algorithm. Below program will help you understand this algorithm.

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))


Output:

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

Selecting random indices and storing in a new list

In this method we will randomly select an index and append it to end of the array. this will be repeated for n time where n is length of 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)


Output:

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

RELATED ARTICLES

Most Popular

Recent Comments