Python | Split strings and digits from string list
Last Updated :
01 May, 2023
Sometimes, while working with String list, we can have a problem in which we need to remove the surrounding stray characters or noise from list of digits. This can be in form of Currency prefix, signs of numbers etc. Let’s discuss a way in which this task can be performed.
Method #1 : Using list comprehension + strip() + isdigit() + join() The combination of above functions can be used to perform this task. In this, we strip the stray characters from numbers that are identified from the strings and return the result.
Python3
from itertools import groupby
test_list = [" - 4 ", "Rs 25 ", " 5 kg", " + 15 "]
print ("The original list : " + str (test_list))
res = [''.join(j).strip() for sub in test_list
for k, j in groupby(sub, str .isdigit)]
print (" List after removing stray characters : " + str (res))
|
Output :
The original list : ['-4', 'Rs 25', '5 kg', '+15']
List after removing stray characters : ['-', '4', 'Rs', '25', '5', 'kg', '+', '15']
Method #2: Using filter() and lambda function
Step-by-step Algorithm:
- Import the re module.
- Create an empty list split_list to store the split string values.
- Loop through each string str in the original_list.
- Use the findall() method from the re module to split the string into digits and non-digits.
- Extend the split_list with only non-empty and non-whitespace values from the split_str.
- Print the original_list and the split_list.
Python3
import re
original_list = [ '-4' , 'Rs 25' , '5 kg' , '+15' ]
split_list = []
for str in original_list:
split_str = re.findall(r '\d+|\D+' , str )
split_list.extend([s for s in split_str if s.strip()])
print ( "The original list :" , original_list)
print ( "List after removing stray characters :" , split_list)
|
Output
The original list : ['-4', 'Rs 25', '5 kg', '+15']
List after removing stray characters : ['-', '4', 'Rs ', '25', '5', ' kg', '+', '15']
Complexity Analysis :
Time complexity: O(nm), where n is the length of the original_list and m is the average length of the strings in the list.
Auxiliary Space: O(nm), where n is the length of the original_list and m is the average length of the strings in the list.
Method #3: Using a loop and a try-except block
- Initialize an empty list called clean_list.
- Loop through each string in original_list.
- Inside the loop, try to convert the string to an integer using the int() function.
- If the conversion succeeds (i.e., the string contains only digits), append the integer to clean_list.
- If the conversion fails (i.e., the string contains non-digit characters), use regular expressions to split the string into digit and non-digit substrings.
- Filter out any empty substrings and append the non-digit substrings to clean_list.
- After the loop, print the original list and the cleaned list.
Python3
import re
original_list = [ '-4' , 'Rs 25' , '5 kg' , '+15' ]
clean_list = []
for s in original_list:
try :
i = int (s)
clean_list.append(i)
except ValueError:
substrings = re.findall(r '\d+|\D+' , s)
clean_substrings = [ss for ss in substrings if ss.strip()]
clean_list.extend(clean_substrings)
print ( "The original list:" , original_list)
print ( "The cleaned list:" , clean_list)
|
Output
The original list: ['-4', 'Rs 25', '5 kg', '+15']
The cleaned list: [-4, 'Rs ', '25', '5', ' kg', 15]
Time complexity: The loop runs once for each string in original_list, so the time complexity is O(n), where n is the length of original_list.
Auxiliary space: The clean_list list requires O(n) space to store the cleaned strings.
Method #4: Using regular expressions-
- Importing the re module for using regular expressions.
- Initializing a list test_list with some strings that include numbers and other characters.
- Printing the original list using print() function and string concatenation.
- Initializing an empty list res to store the cleaned values.
- Using a for loop to iterate over each string in the test_list.
- Using the re.findall() method with a regular expression pattern as an argument to extract all the numbers and non-numeric characters from the current string. The regular expression pattern r’-?\d+(?:\.\d+)?|\w+’ matches either a number (integer or decimal) with an optional minus sign, or a sequence of word characters.
- Appending the extracted values to the res list using the += operator.
- Using another list comprehension to convert each extracted value to an integer if it’s a number, or leave it as a string if it’s a non-numeric character.
Python3
import re
test_list = [ "-4" , "Rs 25" , "5 kg" , "+15" ]
print ( "The original list: " + str (test_list))
res = []
for s in test_list:
res + = re.findall(r '-?\d+(?:\.\d+)?|\w+' , s)
res = [ int (num) if num.isdigit() or (num.startswith( '-' ) and num[ 1 :].isdigit()) else num for num in res]
print ( "The cleaned list: " + str (res))
|
Output
The original list: ['-4', 'Rs 25', '5 kg', '+15']
The cleaned list: [-4, 'Rs', 25, 5, 'kg', 15]
The time complexity of this approach is O(n*m), where n is the length of the input list and m is the maximum length of a string in the list.
The space complexity of this approach is O(n*m), as we are creating a new list with the extracted elements.
Similar Reads
Python | Splitting string list by strings
Sometimes, while working with Python strings, we might have a problem in which we need to perform a split on a string. But we can have a more complex problem of having a front and rear string and need to perform a split on them. This can be multiple pairs for split. Let's discuss certain way to solv
3 min read
Python - Filter float strings from String list
Sometimes, while working with Python list, we can have a problem in which we need to separate the float values from valid strings. But problem arises when float values are in form of strings. Let's discuss certain ways in which this task can be performed. Method #1 : Using loop + Exception Handling
8 min read
Python | Remove all digits from a list of strings
The problem is about removing all numeric digits from each string in a given list of strings. We are provided with a list where each element is a string and the task is to remove any digits (0-9) from each string, leaving only the non-digit characters. In this article, we'll explore multiple methods
4 min read
Python | Splitting list on empty string
Sometimes, we may face an issue in which we require to split a list to list of list on the blank character sent as deliminator. This kind of problem can be used to send messages or can be used in cases where it is desired to have list of list of native list. Let's discuss certain ways in which this
4 min read
Python - Remove substring list from String
In Python Strings we encounter problems where we need to remove a substring from a string. However, in some cases, we need to handle a list of substrings to be removed, ensuring the string is adjusted accordingly. Using String Replace in a LoopThis method iterates through the list of substrings and
3 min read
Python program to split and join a string
In Python, we can use the function split() to split a string and join() to join a string. These functions allow us to easily break a string into smaller parts and then reassemble those parts into a new string. This article will explore ways to split and join a string. [GFGTABS] Python a = "Hell
2 min read
Python - Splitting Text and Number in string
Given a string containing both letters and numbers, the task is to separate the text (letters) and the numbers into two separate outputs. For example, if the input is "abc123", the output should be "abc" and "123". Let's discuss various ways in which we can achieve this in Python. Using for loopThis
3 min read
Splitting String to List of Characters - Python
We are given a string, and our task is to split it into a list where each element is an individual character. For example, if the input string is "hello", the output should be ['h', 'e', 'l', 'l', 'o']. Let's discuss various ways to do this in Python. Using list()The simplest way to split a string i
2 min read
Splitting String to List of Characters - Python
The task of splitting a string into a list of characters in Python involves breaking down a string into its individual components, where each character becomes an element in a list. For example, given the string s = "GeeksforGeeks", the task is to split the string, resulting in a list like this: ['G
3 min read
Python | Splitting operators in String
Sometimes we have a source string to have certain mathematical statement for computations and we need to split both the numbers and operators as a list of individual elements. Let's discuss certain ways in which this problem can be performed. Method #1 : Using re.split() This task can be solved usin
7 min read