- Extract digits from a string in Python
- 2 Easy Ways to Extract Digits from a Python String
- 1. Making use of isdigit() function to extract digits from a Python string
- 2. Using regex library to extract digits
- Conclusion
- Преобразование строки в число в Python. Особенности преобразования числа в строку
- Преобразование строки в целое число с помощью int() в Python
- Преобразуем десятичную строку в число с плавающей точкой в Python
- Преобразуем список строковых чисел в список целых чисел в Python
- Преобразуем список строк в список чисел с плавающей точкой в Python
- Преобразование строки с запятыми в число в Python
- Преобразование строки в число при расчёте високосного года в Python
- Как преобразовать целое число в строку в Python?
Extract digits from a string in Python
Imagine a scenario where you have a string of names and salaries of persons in the form, “Adam 200 Mathew 300 Brian 1000 Elon 3333“. From the given string, you need to separate only the salaries of all the person to perform some mathematical operations like the average of the salaries, how would you do that?
The first challenge is to separate the numerical values from the string, and this article demonstrates different ways to achieve the same.
Approach 1: String.split() + String.isdigit()
string.split() – The method returns a list of strings which are formed by breaking the original string about the separator. The separator is passed as an argument to the function like this, string.split(sep=»Your Seperator») .
string.isdigit() – The method returns true if all characters in the string are digits and there is at least one character, false otherwise.
Approach – We will get the list of all the words separated by a space from the original string in a list using string.split() . We will then iterate the list and check which elements from the list are numbers.
Implementation:
# Approach 1 import numpy as np # For average of salaries names_sal_str = "Adam 200 Mathew 300 Brian 1000 Elon 3333" split_return = names_sal_str.split(' ') # Split based on whitespace, returns a list. print(split_return) #Output ['Adam', '200', 'Mathew', '300', 'Brian', '1000', 'Elon', '3333'] salaries = [] # List for getting the salaries of the employees for values in split_return: # Iterate the list. if values.isdigit(): # Check if the element from the list is a digit. salaries.append(int(values)) # Append the salaries after typecasting. # Find the average of the salaries or whatever we want with the numbers print(np.mean(salaries)) #Output 1208.25
One liner implementation of the above approach using the list comprehension:
names_sal_str = "Adam 200 Mathew 300 Brian 1000 Elon 3333" [int(s) for s in str.split(' ') if s.isdigit()] # Returns a list of all the salaries
The biggest drawback of this method is – string.isdigit() does not work with negative as well as floating-point numbers. So, it will only work for non-negative integers.
This is how string.isdigit() behaves with negative and floating numbers.
# Drawback of approach 1 names_sal_str = "Adam -200 Mathew 300.3 Brian 1000 Elon 3333" for values in names_sal_str.split(' '): if values.isdigit(): print(values) #Output 1000 3333
To overcome this, we can define our own custom method which will check if the number is a digit or not, even for negative and floating-point numbers.
The custom function leverages try and except from python. It tries to typecast all the returns from the string.split() , but doesn’t break the program even if it tries to typecast alphabets and special characters.
Extracting the numbers from the string with custom isdigit() function :
#Improvement of approach 1 # Our custom function which checks if string is an integer or not def custom_is_digit(wrd): is_digit = False try: float(wrd) is_digit = True except ValueError: pass return is_digit if __name__ == '__main__': import numpy as np names_sal_str = "Adam -200.3 Mathew 300 Brian 1000 Elon 3333" split_return = names_sal_str.split(' ') # Split based on whitespace, returns a list print(split_return) salaries = [] # List for getting the salaries of the employees for values in split_return: # Iterate the list if custom_is_digit(values): # Check if the element from the list is a digit print(values) salaries.append(float(values)) # Append the salaries # Find the average of the salaries or whatever we want with the numbers print(np.mean(salaries))
Approach 2: Using regex re
Regex is known for extracting patterns from the string and it can very well be used to extract the numbers from the string.
re module is already bundled with python, so if you have python already installed, then no other installation is required.
Regex [-+]?\d*.\d+|\d+ will include all the +ve, -ve and floating numbers.
# Approach 2 import re import numpy as np if __name__ == "__main__": name_sal_string = "Adam -200.9 Mathew 300 Brian 1000 Elon 3333" salary = re.findall(r"[-+]?\d*\.\d+|\d+", name_sal_string) # Get all, +ve,-ve and floats # But the type of numericals will be string, hence we need to typecast. salary = [float(numbers) for numbers in salary] print('The average of the numbers is <>'.format(np.mean(salary))) # Average.
That’s all, folks .
2 Easy Ways to Extract Digits from a Python String
Hello, readers! In this article, we will be focusing on the ways to extract digits from a Python String. So, let us get started.
1. Making use of isdigit() function to extract digits from a Python string
Python provides us with string.isdigit() to check for the presence of digits in a string.
Python isdigit() function returns True if the input string contains digit characters in it.
We need not pass any parameter to it. As an output, it returns True or False depending upon the presence of digit characters in a string.
inp_str = "Python4Journaldev" print("Original String : " + inp_str) num = "" for c in inp_str: if c.isdigit(): num = num + c print("Extracted numbers from the list : " + num)
In this example, we have iterated the input string character by character using a for loop. As soon as the isdigit() function encounters a digit, it will store it into a string variable named ‘num’.
Thus, we see the output as shown below–
Original String : Python4Journaldev Extracted numbers from the list : 4
Now, we can even use Python list comprehension to club the iteration and idigit() function into a single line.
By this, the digit characters get stored into a list ‘num’ as shown below:
inp_str = "Hey readers, we all are here be 4 the time!" print("Original string : " + inp_str) num = [int(x) for x in inp_str.split() if x.isdigit()] print("The numbers list is : " + str(num))
Original string : Hey readers, we all are here be 4 the time! The numbers list is : [4]
2. Using regex library to extract digits
Python regular expressions library called ‘regex library‘ enables us to detect the presence of particular characters such as digits, some special characters, etc. from a string.
We need to import the regex library into the python environment before executing any further steps.
Further, we we re.findall(r’\d+’, string) to extract digit characters from the string. The portion ‘\d+’ would help the findall() function to detect the presence of any digit.
import re inp_str = "Hey readers, we all are here be 4 the time 1!" print("Original string : " + inp_str) num = re.findall(r'\d+', inp_str) print(num)
So, as seen below, we would get a list of all the digit characters from the string.
Original string : Hey readers, we all are here be 4 the time 1! ['4', '1']
Conclusion
By this, we have come to the end of this topic. Feel free to comment below, in case you come across any question.
I recommend you all to try implementing the above examples using data structures such as lists, dict, etc.
For more such posts related to Python, Stay tuned and till then, Happy Learning!! 🙂
Преобразование строки в число в Python. Особенности преобразования числа в строку
Иногда нам нужно выполнить преобразование строки в целое число либо в число с плавающей точкой. Потребность в этом возникает для осуществления ряда операций. Как это сделать в Python, мы сейчас и поговорим.
Чтобы осуществить преобразование строки в целое число либо число с плавающей точкой, в Python используют функции int и float. Если вы захотите выполнить преобразование без применения данных функций, то получите ошибку. Например, к ошибке приведёт следующий код:
str_a = ’50’ b = 10 c = str_a + b print (c)Преобразование строки в целое число с помощью int() в Python
Давайте посмотрим на следующий участок кода:
str_a = '50' b = 10 c = int(str_a) + b print ("The value of c = ",c)С его помощью мы выведем значение переменной «c», которое будет представлять собой сумму переменных «str_a» и «b».
Преобразуем десятичную строку в число с плавающей точкой в Python
Для преобразования строки в число с плавающей точкой мы можем использовать float:
#Преобразование string во float str_a = '50.85' b = 10.33 c = float(str_a) + b print ("The value of c = ",c)
Однако учтите, что если вы захотите задействовать тут функцию int() , это приведёт к ошибке.
Преобразуем список строковых чисел в список целых чисел в Python
Бывает, что в Python необходимо выполнить преобразование строки из чисел, содержащихся в списке. В таких случаях нам поможет генератор списков. Таким образом создаётся новый список, где можно использовать функцию int() в каждой итерации:
#Преобразование string в int в списке str_lst = ['1', '2', '3'] int_lst = [int(x) for x in str_lst] print (int_lst)
Мы выведем новый список, который будет состоять из целых чисел, полученных из строк.
Преобразуем список строк в список чисел с плавающей точкой в Python
Аналогично можно применять float вместо int для выполнения преобразования списка, включающего в себя строки из целых чисел:
#Преобразование string во float в списке str_lst = ['10.505', '2.3', '3.99'] float_lst = [float(x) for x in str_lst] print (float_lst)
Преобразование строки с запятыми в число в Python
Что делать, если у нас строка наподобие «1,000,000»? Если мы попробуем выполнить её преобразование с помощью функций int() либо float() , мы получим ошибку.
Одно из решений — применение import locale:
locale.setlocale(locale.LC_ALL, ‘en_US.UTF-8’ )Приём работает, но он не идеален. Другое решение — заменить запятые на пустые строки, а потом применить уже известную нам функцию int:
str_a = '5,123,000' int_b = int(str_a.replace(',','')) print ("The integer value",int_b)Результат — целое значение. Это же решение мы можем использовать и для преобразования строки в число с плавающей точкой в Python.
Преобразование строки в число при расчёте високосного года в Python
Как известно, пользовательский ввод в «Пайтоне» воспринимается как строка. К примеру, в следующем коде программа попросит пользователя ввести год, а после ввода значений программа сообщит, является ли этот год високосным. При этом введённое значение сначала будет преобразовано в целое число, а потом будет задействована формула расчёта високосного года:
#Расчёт високосного года try: Y = int(input("Enter a Year? ")) exceptValueError: print ("You may only enter digits in '2000' format!") else: leap_or_not = Y%4 == 0 ifleap_or_not: print ("Leap year") else: print ("Not a leap year")
Таким образом происходит преобразование вводимой строки в целое число, а потом это число применяется для расчёта.
Как преобразовать целое число в строку в Python?
При выполнении преобразования целых чисел в строки используется функция str() . Она принимает объект, который может иметь тип int, float, double и так далее.
Давайте посмотрим на пример преобразования переменной int в строку, которая потом применяется как строка для конкатенации:
#Преобразование int в string a_string = "str function for int to string" a_num = 456 print (a_string + str(a_num))
Результат будет следующим:
str function for int to string456Кстати, если бы целочисленная переменная была нами использована без str() , результатом стала бы ошибка TypeError.