Извлечь из строки числа
Дана строка, содержащая натуральные числа и слова. Необходимо сформировать список из чисел, содержащихся в этой строке. Например, задана строка «abc83 cde7 1 b 24». На выходе мы должны получить список [83, 7, 1, 24].
Решение задачи на языке программирования Python
Следует посимвольно перебирать строку. Если очередной символ цифра, надо добавить ее в новую строку. Далее проверять символы за ней, и если они тоже цифры, то добавлять их в конец этой новой подстроки из цифр. Когда очередной символ окажется не цифрой, или будет достигнут конец строки, то надо преобразовать строку из цифр в число и добавить в список.
s = input() length = len(s) integers = [] i = 0 # индекс текущего символа while i length: s_int = '' # строка для нового числа while i length and '0' s[i] '9': s_int += s[i] i += 1 i += 1 if s_int != '': integers.append(int(s_int)) print(integers)
5 dkfj78df 9 8 dkfj8 [5, 78, 9, 8, 8]
Обратите внимание, что данное решение извлекает именно числа, а не цифры. Иначе мы бы не получили число 78, а получили отдельно цифру 7 и цифру 8. Задача на извлечение цифр существенно проще.
Решение через цикл for:
a = input() num_list = [] num = '' for char in a: if char.isdigit(): num = num + char else: if num != '': num_list.append(int(num)) num = '' if num != '': num_list.append(int(num)) print(num_list)
Если в строке числа всегда отделены от слов пробелами, задача решается проще:
s = input() word_list = s.split() num_list = [] for word in word_list: if word.isnumeric(): num_list.append(int(word)) print(num_list)
Здесь происходит разделение строки на слова по пробелам. В цикле с помощью метода isnumeric каждое слово проверяется, является ли оно числом. Подобную задачу можно решить в одну строку, если использовать функцию filter .
s = input() word_list = s.split() num_list = [int(num) for num in filter( lambda num: num.isnumeric(), word_list)] print(num_list)
В функцию filter передается лямбда-выражение, проверяющее слова, и список слов. Функция возвращает список строк-чисел. Далее с помощью генератора списка строки преобразовываются в целочисленный тип.
На практике при решении подобных задач, когда надо найти и извлечь из строки что-либо, обычно пользуются регулярными выражениями. В примере ниже не обязательно, чтобы число было отделено пробелами.
import re s = input() nums = re.findall(r'\d+', s) nums = [int(i) for i in nums] print(nums)
Для поиска вещественных чисел:
import re s = input() nums = re.findall(r'\d*\.\d+|\d+', s) nums = [float(i) for i in nums] print(nums)
X Скрыть Наверх
Решение задач на Python
Python число в строку
Чтобы конвертировать число в строку, используйте встроенную функцию str() . Эта функция в качестве входящих данных принимает число (или другой тип данных), а в результате выдает строку.
Примеры
Вот один пример:
>>> str(123) '123'
Если число является значением переменной, конвертировать его можно следующим образом:
>>> number = 999 >>> number_as_string = str(number) >>> number_as_string '999'
Конкатенация строк и чисел в Python
Иногда возникает необходимость сконструировать строку, содержащую число из другой переменной. Вот пример, как это делается:
>>> week = 33 >>> greeting = "it is week " + str(week) >>> greeting 'it is week 33'
Избегаем преобразования типов данных
Когда разработчикам нужно объединить число и строку, они обычно применяют функцию str() непосредственно перед выводом данных на экран. Например:
>>> name = "Bob" >>> age = 33 >>> print(name + " is " + str(age) + " years old") Bob is 33 years old
Но гораздо более чистый способ — применять к строкам метод .format() :
>>> print(" is years old".format(name=name, age=age)) Bob is 33 years old
А еще лучше — использовать f-строки (Python 3):
>>> print(f" is years old") Bob is 33 years old
Преобразование числа из строки в тип int и float
Python не позволит сложить строку и число, даже если строка выглядит как число, то есть содержит только цифры:
>>> '50' + 1 # TypeError: cannot concatenate ‘str’ and ‘int’ objects
В архитектуре языка оператор ‘+’ может означать как операцию сложения, так и операцию конкатенации, вследствие чего выбор типа преобразования становится неочевидным. Поэтому интерпретатор воспринимает такую инструкцию как ошибочную. В этом случае нужно использовать инструменты преобразования, чтобы можно было интерпретировать строку как число или наоборот.
Преобразование строковой версии числа в int или float .
- Преобразование строки в тип int ;
- Преобразование строки в тип float ;
- Преобразование списка строк в список чисел.
Преобразование строки в тип int .
# преобразование строки в число >>> num = '50' >>> if num.isdigit(): . int('50') # 50 >>> float('1.5') # 1.5 # преобразование числа в строку >>> str(50) # '50'
Функции int и float преобразует строку в число, функция str преобразует число в строковое представление. В Python нельзя смешивать строковые и числовые типы в таких операторах, как ‘+’ , но можно вручную выполнить необходимые преобразования перед выполнением.
Преобразование строки в тип float .
>>> x = '50' >>> y = 1 >>> z = '1.5' # Операция сложения >>> int(x) + y + float(z) # 52.5 # Операция конкатенации >>> x + str(y) + z # '5011.5' # Преобразование строки с записью вещественного # числа в число с плавающей точкой >>> text = '5.79E-10' >>> float(text) # 5.79e-10
Преобразование списка строк в список чисел.
Для преобразования списка строк с числами в список целых чисел можно ввести проверку перед преобразованием на то, что строка состоит только из десятичных чисел str.isdigit() .
>>> str_list = ['8.3', '11', 'девять', '1', '5', '3', '9', . 'пять', '15', '13', '7', '13.9', 'число'] >>> num_list = [] >>> for i in str_list: . if i.isdigit(): . num_list.append(int(i)) >>> num_list.sort() >>> num_list # [1, 3, 5, 7, 9, 11, 13, 15]
Для преобразования списка строк с числами включая десятичные c разделением их по типам, необходимо перед преобразованием в тип float проверять строку на вхождение точки ‘.’ .
>>> str_list = ['8.3', '11', 'девять.', '1', '5', '3', '9', . '.пять', '15', '13', '7', '13.9', 'число'] >>> def str_to_num(str): . if '.' in str and str.replace('.', '').isdigit(): . return float(str) . elif str.isdigit(): . return int(str) . >>> num_list = [] >>> for i in str_list: . n = str_to_num(i) . if n is not None: . num_list.append(str_to_num(i)) >>> num_list # [8.3, 11, 1, 5, 3, 9, 15, 13, 7, 13.9]
Для преобразования всех чисел в тип float , можно просто заменять точку в строке с числом и проверять получившуюся строку на десятичное число.
>>> str_list = ['8.3', '11', 'девять.', '1', '5', '3', '9', . '.пять', '15', '13', '7', '13.9', 'число'] >>> def is_num(str): . if str.replace('.', '').isdigit(): . return True . >>> num_list = [] >>> for i in str_list: . if is_num(i): . num_list.append(float(i)) . >>> num_list.sort() >>> num_list # [1.0, 3.0, 5.0, 7.0, 8.3, 9.0, 11.0, 13.0, 13.9, 15.0]
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Преобразование строки в число
- Строку в список, кортеж или множество символов
- Одинарные, двойные и тройные кавычки в строке Python
- Вывод специальных символов в строке Python «как есть»
- Объединение и повторение строк
- Индексирование строк
- Использование срезов строк
- Cрез строки Python от заданного символа/знака до конца строки
- Создание макета для печати базовыми методами строк
- Способы форматирования текстовых строк
- Подсчет повторений слов в тексте, деление строки на список слов
- Удаление слова из строки Python по фрагменту или шаблону
- Удаление пунктуации из строки
- Деление строки по заглавным буквам
- Создание отчетов и писем по шаблонам
Python. Средства преобразования строк и одиночных символов.
Средства преобразования строк и одиночных символов. Функции int() , str() , repr() , float() , ord() , chr()
Поиск на других ресурсах:
1. Функция int() . Преобразование в целое число
Функция int() есть конструктором класса int . Эта функция возвращает целочисленный объект, который может быть образован из:
- целого числа или объекта;
- числа или объекта с плавающей запятой;
- строки символов или строчного объекта, содержащего последовательность цифр.
Функция может вызваться одним из двух способов:
- int() – в этом случае функция возвращает значение 0;
- int(x, base) – в этом случае обрабатывается объект x . Значение base определяет систему исчисления, в которую нужно конвертировать объект x . По умолчанию base = 10. Если явным образом задана система исчисления, то тип объекта x должен быть строчным, другие типы в этом случае запрещаются.
Пример.
# Функция int() # 1. Вызов без параметров a = int() # a = 0 # 2. Вызов с целочисленным значением a = int(15) # a = 15 # 3. Вызов с числом с плавающей запятой a = int(2.85) # a = 2 # 4. Вызов со строкой s = '28' a = int(s) # a = 28 # 5. Вызов с конвертированием в другую систему исчисления - только для строк # конвертировать 155 из 16-й системы в десятичную s = '155' a = int(s, 16) # a = 341, значение 155 в 16-й системе # конвертировать 111 из двоичной системы в десятичную s = '111' a = int(s, 2) # a = 7 # 6. Так нельзя # a = int(111,2) - ошибка, нельзя конвертировать число, должна быть строка
2. Функция str() . Преобразование в строку
Функция str() есть конструктором класса str . Функция возвращает объект в виде строки. Функция используется для конвертирования из одного типа (например числового) в строчный тип.
Функция имеет две реализации:
- str() – без параметров. В этом случае функция возвращает пустую строку;
- str(x) – с параметром x . Параметр x есть объектом некоторого типа. Данный вызов может также содержать еще два дополнительных параметра, которые определяют систему кодирования (по умолчанию система кодирования устанавливается utf-8) и схему обработки ошибок (по умолчанию установлена схема вызова исключения типа UnicodeError).
Результат функции str() может использоваться для вывода в функции print() .
Пример.
# Функция str() # 1. Вызов с целым числом x = 25 s = str(x) # s = '25' - строка символов # 2. Вызов с числом с плавающей запятой y = 2.338 s = str(y) # s = '2.338' # 3. Вызов со строкой s = str("3.778") # s = '3.778' # 4. Вызов со строкой, которая не отображает число s = str("abcdef") # s = 'abcdef' # 5. Вызов без параметров s = str() # s = ''
3. Функция repr() . Преобразование в строку как литерал
Функция repr() реализует преобразование в строку таким образом, если бы эта строка была литералом в программном коде.
Функция repr() может быть применена к:
- целым числам;
- числам с плавающей запятой;
- строкам символов.
Пример 1. Конвертировать целое число в строку, которая представлена литералом.
# Функция repr() # конвертировать целое число в строку number = 25 snumber = repr(number) # snumber = '25' - как строка символов number = -100029 snumber = repr(number) # snumber = '-100029' - как строка символов
Пример 2. Конвертировать в строку число с плавающей запятой.
# Функция repr() # конвертировать число с плавающей запятой в строку number = 25.233 snumber = repr(number) # snumber = '25.233' snumber = repr(-1e-2) # snumber = '-0.01'
Пример 3. Конвертировать строку символов в другую строку так если бы она была литералом.
# Функция repr() # конвертировать строку в строку s1 = 'Text string' s2 = repr(s1) # s2 = "'Text string'" s1 = "Text string" s2 = repr(s1) # s2 = "'Text string'"
Пример 4. Конвертирование кортежа.
# Функция repr() - обработка кортежа x = ( 2.85, 15, 'Hello') str_x = repr(x) # str_x = "(2.85, 15, 'Hello')"
4. Какое отличие между функциями repr() и str() ?
В языке Python функции repr() и str() преобразуют произвольные объекты в их строчное представление.
Разница между функциями проявляется в том, как они конвертируют строку.
Функция repr() возвращает представление строчного объекта в виде строки программного кода, которую можно выполнить чтобы воссоздать этот объект. Иными словами, функция repr() возвращает строку в виде строки. При использовании такого объекта в функции print() будут выведены ограничивающие строку кавычки (строка во вложенных кавычках).
В свою очередь, функция str() используется для конвертирования строки в строку без ее преобразования в предшествующую форму. При использовании результата функции str() в функции print() будет выведена обычная строка в одинарных кавычках.
Например.
# Функции repr() и str() # конвертировать строку в строку s1 = 'Text string' # функция repr() s2 = repr(s1) # s2 = "'Text string'" # функция str() s3 = str(s1) # s3 = 'Text string'
Как видно из вышеприведенного кода, функция repr() возвращает строку как литерал
"'Text string'"
а функция str() возвращает обычную строку
'Text string'
5. Функция float() . Преобразование в число с плавающей запятой
Функция float() возвращает число с плавающей запятой, которое может быть образовано от другого числа или от строки. Функция может вызываться одним из двух способов:
- float() – без параметра. В этом случае возвращается значение 0.0;
- float(x) – где параметр x задает число или строку, которую нужно конвертировать.
В качестве входного параметра или исходного результата функция может использовать грамматические символы:
- «Infinity» или «inf» – обозначают бесконечность. Бесконечность может быть отрицательной: «-Infinity» или «-inf» ;
- «nan» – обозначает неопределенность.
Пример.
# Функция float() - возвращает число с плавающей запятой # 1. Результат получается из числа a = 25 # целое число x = float(a) # x = 25.0 b = 21.555e-2 # число с плавающей запятой x = float(b) # x = 0.21555 # 2. Результат получается из строки # s = 'abcdef' - ошибка, строка не имеет вида числа # x = float(s) # строка в экспоненциальном формате s = '-1.23e-2' x = float(s) # x = -0.0123 # строка в обычном формате s = "288.75" x = float(s) # x = 288.75 - как число # использование в выражении x = float(5.2)+float(3.8)*float(-2.1) # x = -2.7799999999999994 # использование со знаком + x = float('+2.34') # x = 2.34 # использование со словом "Infinity" или "inf" x = float("Infinity") # x = inf x = float('-inf') # x = -inf - с отрицательным знаком # использование со словом "nan" x = float("nan") # x = nan x = float() # x = 0.0
6. Функции ord() и chr() . Преобразование кодов символов
Функции ord() и chr() используются для одиночных символов. Эти функции являются инверсными друг к другу.
Функция chr() позволяет получать символ на основе его кода. Функция ord() позволяет получить код на основе представления символа.
Общая форма вызова функции chr() следующая
c = chr(i)
где c – символьное представление символа с Unicode-кодом i .
Общая форма вызова функции ord()
i = ord(c)
где i – код символа c .
Пример.
# Функции chr() и ord() # 1. Функция chr() code = 49 # код в десятичной системе исчисления symbol = chr(code) # symbol = '1' - цифра '1' code = 100 symbol = chr(code) # symbol = 'd' code = 7785 symbol = chr(code) # symbol = 'ṩ' - кодирование Unicode # 2. Функция ord symbol = '5' code = ord(symbol) # code = 53 symbol = 'ṩ' code = ord(symbol) # code = 7785 symbol = ' ' # символ пробел code = ord(symbol) # code = 32
7. Можно ли в Python сложить строку с числом?
Нет, нельзя. Если нужно сложить число в форме строки, то для этого используется соответствующая функция преобразования. Если нужно сложить две строки (конкатенация строк), то число конвертируется в строку с помощью соответствующей функции.
Пример.
# Сложить строку с числом не получится s = '25' # это строка a = 30 # это число # Случай 1. Сложить (суммировать) два числа # Предварительно нужно конвертировать строку в число b = int(s) res = a + b print('As numbers: a + s = ', res) # Случай 2. Сложить две строки # Предварительно нужно конвертировать число в строку res_str = str(a) + s print('As strings: a + s = ', res_str)
Результат выполнения программы
As numbers: a + s = 55 As strings: a + s = 3025
Связанные темы
- Строки. Общие понятия. Объявление строки. Операции над строками. Примеры
- Экранированные последовательности. Неформатированные строки. Многострочные блоки текста
- Доступ по индексам. Срезы. Получение фрагмента строки. Примеры