Python | Remove consecutive duplicates from list
In Python, we generally wish to remove the duplicate elements, but sometimes for several specific usecases, we require to have remove just the elements repeated in succession. This is a quite easy task and having a shorthand for it can be useful. Let’s discuss certain ways in which this task can be performed.
Method #1 : Using groupby()
+ list comprehension
Using the groupby function, we can group the together occurring elements as one and can remove all the duplicates in succession and just let one element be in the list.
# Python3 code to demonstrate # removing consecutive duplicates # using groupby() + list comprehension from itertools import groupby # initializing list test_list = [ 1 , 4 , 4 , 4 , 5 , 6 , 7 , 4 , 3 , 3 , 9 ] # printing original list print ( "The original list is : " + str (test_list)) # using groupby() + list comprehension # removing consecutive duplicates res = [i[ 0 ] for i in groupby(test_list)] # printing result print ( "The list after removing consecutive duplicates : " + str (res)) |
The original list is : [1, 4, 4, 4, 5, 6, 7, 4, 3, 3, 9] The list after removing consecutive duplicates : [1, 4, 5, 6, 7, 4, 3, 9]
Method #2 : Using zip_longest()
+ list comprehension
This function can be used to keep the element and delete the successive elements with the use of slicing. The zip_longest function does the task of getting the values together in the one list.
# Python3 code to demonstrate # removing consecutive duplicates # using zip_longest()+ list comprehension from itertools import zip_longest # initializing list test_list = [ 1 , 4 , 4 , 4 , 5 , 6 , 7 , 4 , 3 , 3 , 9 ] # printing original list print ( "The original list is : " + str (test_list)) # using zip_longest()+ list comprehension # removing consecutive duplicates res = [i for i, j in zip_longest(test_list, test_list[ 1 :]) if i ! = j] # printing result print ( "List after removing consecutive duplicates : " + str (res)) |
The original list is : [1, 4, 4, 4, 5, 6, 7, 4, 3, 3, 9] List after removing consecutive duplicates : [1, 4, 5, 6, 7, 4, 3, 9]