Python – Remove all digits before given Number
Last Updated :
03 Mar, 2023
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
test_str = 'geeksforgeeks 2 6 is 4 geeks 5 and CS8'
print ( "The original string is : " + str (test_str))
K = 4
idx = test_str.split().index( str (K))
res = [ele for i, ele in enumerate (test_str.split()) if not (i < idx and ele.isdigit())]
res = ' ' .join(res)
print ( "String after removing digits before K : " + str (res))
|
Output
The original string is : geeksforgeeks 2 6 is 4 geeks 5 and CS8
String after removing digits before K : geeksforgeeks is 4 geeks 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
import re
test_str = 'geeksforgeeks 2 6 is 4 geeks 5 and CS8'
print ( "The original string is : " + str (test_str))
K = 4
res = re.sub( '[023456789]' , '', test_str[ 0 : test_str.index( str (K))]) + test_str[test_str.index( str (K)):]
print ( "String after removing digits before K : " + str (res))
|
Output
The original string is : geeksforgeeks 2 6 is 4 geeks 5 and CS8
String after removing digits before K : geeksforgeeks is 4 geeks 5 and CS8
Time Complexity: O(n)
Space Complexity: O(n)
Method #3 : Using index(),replace() and slicing
Python3
test_str = 'geeksforgeeks 2 6 is 4 geeks 5 and CS8'
print ( "The original string is : " + str (test_str))
K = 8
a = test_str.index( str (K))
digits = "0123456789"
b = test_str[:a]
c = test_str[a:]
for i in digits:
b = b.replace(i,"")
print ( "String after removing digits before K : " + (b + c))
|
Output
The original string is : geeksforgeeks 2 6 is 4 geeks 5 and CS8
String after removing digits before K : geeksforgeeks is geeks and CS8
Method #4 : Using list comprehension:
Python3
test_str = 'geeksforgeeks 2 6 is 4 geeks 5 and CS8'
K = 4
words = test_str.split()
print ( "The original string is : " + str (test_str))
res = []
K_reached = False
for 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))
|
Output
The original string is : geeksforgeeks 2 6 is 4 geeks 5 and CS8
String after removing digits before K : geeksforgeeks is geeks and CS8
Time Complexity: O(n)
Space Complexity: O(n)
Method #5: Using for loop and in operator
Python3
test_str = 'geeksforgeeks 2 6 is 4 geeks 5 and CS8'
K = 4
print ( "The original string is : " + str (test_str))
words = test_str.split()
res = []
K_reached = False
for 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))
|
Output
The original string is : geeksforgeeks 2 6 is 4 geeks 5 and CS8
String after removing digits before K : geeksforgeeks is geeks 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 = 'geeksforgeeks 2 6 is 4 geeks 5 and CS8'
K = 4
print ( "The original string is : " + str (test_str))
res = remove_digits_before_K(test_str, K)
print ( "String after removing digits before K : " + str (res))
|
Output
The original string is : geeksforgeeks 2 6 is 4 geeks 5 and CS8
String after removing digits before K : geeksforgeeks is geeks 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.
Share your thoughts in the comments
Please Login to comment...