Open In App

Python – Remove all digits before given Number

Improve
Improve
Like Article
Like
Save
Share
Report

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 string
test_str = 'geeksforgeeks 2 6 is 4 geeks 5 and CS8'
 
# printing original string
print("The original string is : " + str(test_str))
 
# initializing K
K = 4
 
# get K Number index
idx = 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))


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




# Python3 code to demonstrate working of
# Remove digits before K Number
# Using regex() + index()
import re
 
# initializing string
test_str = 'geeksforgeeks 2 6 is 4 geeks 5 and CS8'
 
# printing original string
print("The original string is : " + str(test_str))
 
# initializing K
K = 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))


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




# Python3 code to demonstrate working of
# Remove digits before K Number
 
# Initializing string
test_str = 'geeksforgeeks 2 6 is 4 geeks 5 and CS8'
 
# Printing original string
print("The original string is : " + str(test_str))
 
# Initializing K
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,"")
# Printing result
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()
# Printing original string
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))
#This code is contributed by Jyothi pinjala.


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
 
# Printing original string
print("The original string is : " + str(test_str))
 
# Splitting the string into words
words = test_str.split()
 
res = []
K_reached = False
 
# Iterating through each word in the list
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))
 
#This code is contributed by Vinay Pinjala.


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:

  1. Split the input string into words.
  2. Define a recursive helper function that takes in a list of words and a boolean value K_reached.
  3. The helper function pops the first word off the list of words and examines it.
  4. 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.
  5. 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.
  6. Otherwise, include the current word in the result string and continue recursively with the remaining list of words and the same K_reached value.
  7. When the list of words is empty, return an empty string.
  8. 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
# Printing original string
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.



Last Updated : 03 Mar, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads