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.
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) |
[2, 3, 6, 1, 5, 4]