Python – Extract range of Consecutive Similar elements ranges from string list
Given a list, extract range of consecutive similar elements.
Input : test_list = [2, 3, 3, 3, 8, 8]
Output : [(2, 0, 0), (3, 1, 3), (8, 4, 5)]
Explanation : 2 occurs from 0th to 0th index, 3 from 1st to 3rd index.Input : test_list = [3, 3, 3]
Output : [(3, 0, 3)]
Explanation : 3 from 0th to 3rd index.
Approach: Using loop
This is a brute way to tackle this problem. In this, we loop for each element and get a similar element range. These are traced and appended in list accordingly with elements.
- Initialize a list test_list with integer values.
- Print the original list.
- Initialize an empty list res to store the results.
- Initialize a variable idx to 0.
- While the value of idx is less than the length of the test_list:
a. Set the variable strt_pos equal to the current value of idx.
b. Set the variable val equal to the value at index idx in test_list.
c. While the value of idx is less than the length of test_list and the value at index idx is equal to val, increment idx by 1.
d. Set the variable end_pos equal to idx – 1.
e. Append the tuple (val, strt_pos, end_pos) to the list res. - Print the elements with their range in the format [ele, strt_pos, end_pos] using the res list.
Python3
# Python3 code to demonstrate working of # Consecutive Similar elements ranges # Using loop # initializing list test_list = [ 2 , 3 , 3 , 3 , 8 , 8 , 6 , 7 , 7 ] # printing original list print ( "The original list is : " + str (test_list)) res = [] idx = 0 while idx < ( len (test_list)): strt_pos = idx val = test_list[idx] # getting last pos. while (idx < len (test_list) and test_list[idx] = = val): idx + = 1 end_pos = idx - 1 # appending in format [ele, strt_pos, end_pos] res.append((val, strt_pos, end_pos)) # printing result print ( "Elements with range : " + str (res)) |
Output:
The original list is : [2, 3, 3, 3, 8, 8, 6, 7, 7] Elements with range : [(2, 0, 0), (3, 1, 3), (8, 4, 5), (6, 6, 6), (7, 7, 8)]
Time Complexity: O(n2)
Space Complexity: O(n)
Please Login to comment...