Shuffle an Array in Python

PythonServer Side ProgrammingProgramming

Suppose we have an array A, we have to shuffle a set of numbers without duplicates. So if the input is like [1,2,3], then for shuffling, it will be [1,3,2], after resetting, if we shuffle again, it will be [2,3,1]

To solve this, we will follow these steps −

  • There will be different methods. these are init(), reset(), shuffle(). These will act like below −

  • init will be like −

  • original := a copy of the given array

  • temp := nums

  • indices := a list of numbers from 0 to length of nums – 1

  • the reset() will return the original array

  • the shuffle() will be like −

  • if length of temp is 0, then return empty array

  • i := choice randomly one index from indices array, j := choose another index from indices array randomly

  • swap the elements present at index i and j

  • return temp

  • another method called getAllPermutation() will take nums, i, initially i = 0, will be like −

  • curr := i

  • if i = length of nums, then

    • insert a copy of nums array into another array called all

    • return

  • for j := curr to length of nums

    • swap elements at index j and curr from nums

    • call getAllPermutation(nums, curr + 1)

    • swap elements at index j and curr from nums

Let us see the following implementation to get better understanding −

Example

 Live Demo

import random
class Solution(object):
   def __init__(self, nums):
      self.original = [x for x in nums]
      self.temp = nums
      self.indices = [x for x in range(len(nums))]
   def reset(self):
      return self.original
   def shuffle(self):
      if not len(self.temp):
         return []
      i = random.choice(self.indices)
      j = random.choice(self.indices)
      self.temp[i], self.temp[j] = self.temp[j], self.temp[i]
      return self.temp
ob = Solution([1,2,3])
print(ob.shuffle())
print(ob.reset())
print(ob.shuffle())

Input

Initialize with [1,2,3] , then call shuffle(), reset() and shuffle()

Output

[2, 1, 3]
[1, 2, 3]
[2, 3, 1]
raja
Published on 04-Mar-2020 06:27:06
Advertisements