Open In App

Python | List Element Count with Order

Last Updated : 25 Apr, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

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))


Output : 

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))


Output

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))


Output

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))


Output

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)



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads