Python – Remove all digits before given Number

Given a String, remove all numeric digits before K number.
Method #1 : Using split() + enumerate() + index() + list comprehension
This is one of the ways in which this task can be performed. In this, we perform task of split() to get all words, getting index of K number using index() and list comprehension can be used to extract digits only after the K Number.
Python3
# Python3 code to demonstrate working of # Remove digits before K Number# Using split() + enumerate() + index() + list comprehension# initializing stringtest_str = 'zambiatek 2 6 is 4zambiatek 5 and CS8'# printing original stringprint("The original string is : " + str(test_str))# initializing KK = 4# get K Number indexidx = test_str.split().index(str(K))# isdigit() used to check for number res = [ele for i, ele in enumerate(test_str.split()) if not (i < idx and ele.isdigit())]res = ' '.join(res)# printing result print("String after removing digits before K : " + str(res)) |
The original string is :zambiatek 2 6 is 4zambiatek 5 and CS8 String after removing digits before K :zambiatek is 4zambiatek 5 and CS8
Time Complexity: O(n)
Space Complexity: O(n)
Method #2 : Using regex() + index()
In this method, regex is used to remove all the elements before the required index, and then strings are joined pre and post index.
Python3
# Python3 code to demonstrate working of # Remove digits before K Number# Using regex() + index()import re# initializing stringtest_str = 'zambiatek 2 6 is 4zambiatek 5 and CS8'# printing original stringprint("The original string is : " + str(test_str))# initializing KK = 4# using regex to achieve task res = re.sub('[023456789]', '', test_str[0 : test_str.index(str(K))]) + test_str[test_str.index(str(K)):]# printing result print("String after removing digits before K : " + str(res)) |
The original string is :zambiatek 2 6 is 4zambiatek 5 and CS8 String after removing digits before K :zambiatek is 4zambiatek 5 and CS8
Time Complexity: O(n)
Space Complexity: O(n)
Method #3 : Using index(),replace() and slicing
Python3
# Python3 code to demonstrate working of# Remove digits before K Number# Initializing stringtest_str = 'zambiatek 2 6 is 4zambiatek 5 and CS8'# Printing original stringprint("The original string is : " + str(test_str))# Initializing KK = 8a=test_str.index(str(K))digits="0123456789"b=test_str[:a]c=test_str[a:]for i in digits: b=b.replace(i,"")# Printing resultprint("String after removing digits before K : " + (b+c)) |
The original string is :zambiatek 2 6 is 4zambiatek 5 and CS8 String after removing digits before K :zambiatek is zambiatek and CS8
Method #4 : Using list comprehension:
Python3
test_str = 'zambiatek 2 6 is 4zambiatek 5 and CS8'K = 4words = test_str.split()# Printing original stringprint("The original string is : " + str(test_str))res = []K_reached = Falsefor word in words: if not K_reached and word.isdigit(): continue elif word == str(K): K_reached = True res.append(word)res = ' '.join(res)print("String after removing digits before K : " + str(res))#This code is contributed by Jyothi pinjala. |
The original string is :zambiatek 2 6 is 4zambiatek 5 and CS8 String after removing digits before K :zambiatek iszambiatek and CS8
Time Complexity: O(n)
Space Complexity: O(n)
Method #5: Using for loop and in operator
Python3
test_str = 'zambiatek 2 6 is 4zambiatek 5 and CS8'K = 4# Printing original stringprint("The original string is : " + str(test_str))# Splitting the string into wordswords = test_str.split()res = []K_reached = False# Iterating through each word in the listfor word in words: if not K_reached and word.isdigit(): continue elif word == str(K): K_reached = True res.append(word)res = ' '.join(res)print("String after removing digits before K : " + str(res))#This code is contributed by Vinay Pinjala. |
The original string is :zambiatek 2 6 is 4zambiatek 5 and CS8 String after removing digits before K :zambiatek iszambiatek and CS8
Time Complexity:O(N)
Auxiliary Space :O(N)
Method#6: Using Recursive method.
Algorithm:
- Split the input string into words.
- Define a recursive helper function that takes in a list of words and a boolean value K_reached.
- The helper function pops the first word off the list of words and examines it.
- If we haven’t reached K yet and the current word is a digit, skip over it and continue recursively with the remaining list of words and the same K_reached value.
- If we encounter K, include it in the result string and set K_reached to True, then continue recursively with the remaining list of words and the updated K_reached value.
- Otherwise, include the current word in the result string and continue recursively with the remaining list of words and the same K_reached value.
- When the list of words is empty, return an empty string.
- Strip any leading or trailing whitespace from the resulting string.Call the helper function with the initial list of words and K_reached=False, and return the resulting string.
Python3
def remove_digits_before_K(test_str, K): def helper(words, K_reached): if not words: return '' word = words.pop(0) if not K_reached and word.isdigit(): return helper(words, K_reached) elif word == str(K): return word + ' ' + helper(words, True) else: return word + ' ' + helper(words, K_reached) words = test_str.split() return helper(words, False).strip()test_str = 'zambiatek 2 6 is 4zambiatek 5 and CS8'K = 4# Printing original stringprint("The original string is : " + str(test_str))res=remove_digits_before_K(test_str, K)print("String after removing digits before K : " + str(res)) |
The original string is :zambiatek 2 6 is 4zambiatek 5 and CS8 String after removing digits before K :zambiatek iszambiatek and CS8
The time complexity of the algorithm is O(n), where n is the number of words in the input string, because we need to process each word exactly once.
The auxiliary space of the algorithm is also O(n), because we create a new list of words and a new string with each recursive call to the helper function, and the maximum depth of the recursion is equal to the number of words in the input string.



