Python | Ways to shuffle a list

24 Jun, 2021
Shuffling a sequence of numbers have always been an useful utility and the question that has appeared in many company placement interviews as well. 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 : Fisher–Yates shuffle AlgorithmThis is one of the famous algorithms that is mainly employed to shuffle a sequence of numbers in python. This algorithm just takes the higher index value, and swaps it with current value, this process repeats in a loop till end of the list.  
Python3
# Python3 code to demonstrate# shuffle a list# using Fisher–Yates shuffle Algorithm import random # initializing listtest_list = [1, 4, 5, 6, 3] # Printing original listprint ("The original list is : " + str(test_list)) # using Fisher–Yates shuffle Algorithm# to shuffle a listfor i in range(len(test_list)-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    test_list[i], test_list[j] = test_list[j], test_list[i]     # Printing shuffled listprint ("The shuffled list is : " +  str(test_list))
The original list is : [1, 4, 5, 6, 3]
The shuffled list is : [4, 3, 1, 5, 6]
 
  Method #2 : Using random.shuffle() This is most recommended method to shuffle a list. Python in its random library provides this inbuilt function which in-place shuffles the list. Drawback of this is that list ordering is lost in this process. Useful for developers who choose to save time and hustle. 
Python3
# Python3 code to demonstrate# shuffle a list# using random.shuffle() import random # initializing listtest_list = [1, 4, 5, 6, 3] # Printing original listprint ("The original list is : " + str(test_list)) # using random.shuffle()# to shuffle a listrandom.shuffle(test_list) # Printing shuffled listprint ("The shuffled list is : " +  str(test_list))
The original list is : [1, 4, 5, 6, 3]
The shuffled list is : [5, 6, 4, 3, 1]
 
  Method #3 : Using random.sample() This is quite a useful function, better than the shuffle method used above in aspect that it creates a new shuffled list and returns it rather than disturbing the order of original list. This is useful in cases we require to retain the original list. 
Python3
# Python3 code to demonstrate# shuffle a list# using random.sample() import random # initializing listtest_list = [1, 4, 5, 6, 3] # Printing original listprint ("The original list is : " + str(test_list)) # using random.sample()# to shuffle a listres = random.sample(test_list, len(test_list)) # Printing shuffled listprint ("The shuffled list is : " +  str(res))
The original list is : [1, 4, 5, 6, 3]
The shuffled list is : [5, 3, 6, 1, 4]
 
Method 4:
In this method we select a index randomly and append that element at that index to the list.
Python3
import random # Assign arrayarr = [1, 2, 3, 4, 5, 6] # Display original arrayprint("Original List: ", arr) # Get length of Listn = len(arr) #repeat the following for n number of timesfor i in range(n):    #select an index randomly    j = random.randint(0, n-1)    #delete the element at that index.    element=arr.pop(j)    #now append that deleted element to the list    arr.append(element)print("Shuffled List: ",arr)
Original List:  [1, 2, 3, 4, 5, 6]
Shuffled List:  [4, 5, 3, 2, 6, 1]
pulamolusaimohan
Python list-programs
python-list
Python
python-list
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Different ways to create Pandas Dataframe
Enumerate() in Python
Python String | replace()
How to Install PIP on Windows ?
*args and **kwargs in Python
Python Classes and Objects
Convert integer to string in Python
Python | os.path.join() method
Create a Pandas DataFrame from Lists
Introduction To PYTHON