Given a string and ranges list, remove all the characters that occur in ranges.
Input : test_str = ‘neveropen is best for Lazyroar’, range_list = [(3, 6), (7, 10)]
Output : Lazyroar is best for Lazyroar
Explanation: The required ranges removed.Input : test_str = ‘neveropen is best for Lazyroar’, range_list = [(3, 6)]
Output : georLazyroar is best for Lazyroar
Explanation : The required ranges removed.
Method #1: Using loop
In this, we check for each range, and remake string, considering the index doesn’t lie in range checking using conditional statements.
Python3
# Python3 code to demonstrate working of # Remove index ranges from String # Using loop # initializing strings test_str1 = 'neveropen is best for Lazyroar' # printing original string print ( "The original string 1 is : " + str (test_str1)) # initializing ranges list range_list = [( 3 , 6 ), ( 7 , 10 ), ( 14 , 17 )] res = "" for idx, chr in enumerate (test_str1): for strt_idx, end_idx in range_list: # checking for ranges and appending if strt_idx < = idx + 1 < = end_idx: break else : res + = chr # printing result print ( "The reconstructed string : " + str (res)) |
The original string 1 is : neveropen is best for Lazyroar The reconstructed string : Lazyroarbest for Lazyroar
Method #2 : Using any() + list comprehension + join()
In this, we perform the task of checking for indices for strings using any() and list comprehension is used to reconstruct string accordingly.
Python3
# Python3 code to demonstrate working of # Remove index ranges from String # Using any() + list comprehension + join() # initializing strings test_str1 = 'neveropen is best for Lazyroar' # printing original string print ( "The original string 1 is : " + str (test_str1)) # initializing ranges list range_list = [( 3 , 6 ), ( 7 , 10 ), ( 14 , 17 )] # using any() to check for strings in index ranges res = ''.join( chr for idx, chr in enumerate (test_str1, 1 ) if not any (strt_idx < = idx < = end_idx for strt_idx, end_idx in range_list)) # printing result print ( "The reconstructed string : " + str (res)) |
The original string 1 is : neveropen is best for Lazyroar The reconstructed string : Lazyroarbest for Lazyroar
Time Complexity: O(n2 )
Auxiliary Space: O(n)
Method #3: Using itertools.compress()
- Import the itertools module for compress operations.
- Initialize an empty string res.
- Initialize a list indices of the same length as test_str1, with all values set to True.
Iterate over the range_list, and for each (start_idx, end_idx) in the list:- Update the corresponding indices in indices to False for the given range.
- Use itertools.compress() function to filter out the characters from test_str1 using the indices list and join them to form the reconstructed string.
- Print the reconstructed string res.
Python3
# Python3 code to demonstrate working of # Remove index ranges from String # Using itertools.compress() import itertools # initializing strings test_str1 = 'neveropen is best for Lazyroar' # printing original string print ( "The original string 1 is : " + str (test_str1)) # initializing ranges list range_list = [( 3 , 6 ), ( 7 , 10 ), ( 14 , 17 )] res = "" indices = [ True ] * len (test_str1) for start_idx, end_idx in range_list: for i in range (start_idx - 1 , end_idx): indices[i] = False res = ''.join(itertools.compress(test_str1, indices)) # printing result print ( "The reconstructed string : " + str (res)) |
The original string 1 is : neveropen is best for Lazyroar The reconstructed string : Lazyroarbest for Lazyroar
Time complexity: O(n), where n is the length of the input string test_str1.
Auxiliary space: O(n), where n is the length of the input string test_str1.