# 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]`

Previous
Next