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 numpy as np
arr = np.array([ 1 , 2 , 3 , 4 , 5 , 6 ])
print ( "Original array: " , arr)
np.random.shuffle(arr)
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 random
import array
arr = np.array([ 1 , 2 , 3 , 4 , 5 , 6 ])
print ( "Original array: " , arr)
random.shuffle(arr)
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 random
import array
arr = array.array( 'q' , [ 1 , 2 , 3 , 4 , 5 , 6 ])
print ( "Original array: " , arr)
arr = array.array( 'q' , random.sample( list (arr), 6 ))
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 random
import array
class Shuffler( object ):
def __init__( self , arr):
self .temp_array = arr
self .indices = [index for index in range ( len (arr))]
def shuffle( self ):
if not len ( self .temp_array):
return []
for i in range (random.randint( int ( len ( self .temp_array) / 2 ),
len ( self .temp_array))):
i = random.choice( self .indices)
j = random.choice( self .indices)
self .temp_array[i], self .temp_array[j] = self .temp_array[j],
self .temp_array[i]
return self .temp_array
arr = array.array( 'q' , [ 1 , 2 , 3 , 4 , 5 , 6 ])
ob = Shuffler(arr)
print ( "Original array: " , arr)
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 random
import numpy as np
def shuffler (arr, n):
for i in range (n - 1 , 0 , - 1 ):
j = random.randint( 0 ,i + 1 )
arr[i],arr[j] = arr[j],arr[i]
return arr
arr = np.array([ 1 , 2 , 3 , 4 , 5 , 6 ])
print ( "Original array: " ,arr)
n = len (arr)
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]
Last Updated :
15 Sep, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...