Skip to content
Related Articles

Related Articles

Shuffle an array in Python

View Discussion
Improve Article
Save Article
  • Last Updated : 05 Sep, 2021

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.

Method 1: In this method we use shuffle() method from numpy library. 

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]

Method 2: In this method we will use shuffle() method from Random library to shuffle the given array.

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]

Method 3: In this method we will use sample() method from Random library to shuffle the given 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])

Method 4: 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])

Method 5: 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]

Method 6:

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

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

My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!