Sometimes, while working with lists or numbers we can have a problem in which we need to attach with each element of list, a number, which is the position of that element’s occurrence in that list. This type of problem can come across many domains. Let’s discuss a way in which this problem can be solved.
Method 1: Using defaultdict() + loop
We can perform this task using defaultdict() and loop by carefully assigning and incrementing order of elements.
Python3
# Python3 code to demonstrate working of # List Element Count Order # using defaultdict() + loop from collections import defaultdict # initialize list test_list = [ 1 , 4 , 1 , 5 , 4 , 1 , 5 ] # printing original list print ( "The original list : " + str (test_list)) # List Element Count Order # using defaultdict() + loop temp = defaultdict( int ) res = [] for ele in test_list: temp[ele] + = 1 res.append((ele, temp[ele])) # printing result print ( "List elements with their order count : " + str (res)) |
The original list : [1, 4, 1, 5, 4, 1, 5] List elements with their order count : [(1, 1), (4, 1), (1, 2), (5, 1), (4, 2), (1, 3), (5, 2)]
Time Complexity: O(n*n), where n is the length of the input list. This is because we’re using defaultdict() + loop which has a time complexity of O(n*n) in the worst case.
Auxiliary Space: O(n), as we’re using additional space res other than the input list itself with the same size of input list.
Method 2 : Using count() method, with slicing
Python3
# Python3 code to demonstrate working of # List Element Count Order # initialize list test_list = [ 1 , 4 , 1 , 5 , 4 , 1 , 5 ] # printing original list print ( "The original list : " + str (test_list)) res = [] for i in range ( 0 , len (test_list)): x = test_list[i] a = test_list[:i].count(x) + 1 res.append((x, a)) # printing result print ( "List elements with their order count : " + str (res)) |
The original list : [1, 4, 1, 5, 4, 1, 5] List elements with their order count : [(1, 1), (4, 1), (1, 2), (5, 1), (4, 2), (1, 3), (5, 2)]
Time Complexity: O(n*n), where n is the length of the list test_list
Auxiliary Space: O(n*n) additional space of size n is created where n is the number of elements in the res list
Method 3 : Using count() and append() methods
Python3
# Python3 code to demonstrate working of # List Element Count Order # initialize list test_list = [ 1 , 4 , 1 , 5 , 4 , 1 , 5 ] # printing original list print ( "The original list : " + str (test_list)) res = [] x = [] for i in range ( 0 , len (test_list)): x.append(test_list[i]) a = (test_list[i],x.count(test_list[i])) res.append(a) # printing result print ( "List elements with their order count : " + str (res)) |
The original list : [1, 4, 1, 5, 4, 1, 5] List elements with their order count : [(1, 1), (4, 1), (1, 2), (5, 1), (4, 2), (1, 3), (5, 2)]
Time Complexity: O(n*n), where n is the length of the list test_list
Auxiliary Space: O(n), where n is the number of elements in the res list
Method 4: using operator.countOf() method
Python3
# Python3 code to demonstrate working of # List Element Count Order import operator as op # initialize list test_list = [ 1 , 4 , 1 , 5 , 4 , 1 , 5 ] # printing original list print ( "The original list : " + str (test_list)) res = [] for i in range ( 0 , len (test_list)): x = test_list[i] a = op.countOf(test_list[:i], x) + 1 res.append((x, a)) # printing result print ( "List elements with their order count : " + str (res)) |
The original list : [1, 4, 1, 5, 4, 1, 5] List elements with their order count : [(1, 1), (4, 1), (1, 2), (5, 1), (4, 2), (1, 3), (5, 2)]
Time Complexity: O(N)
Auxiliary Space : O(N)