При написании программ часто возникает необходимость изменить тип данных, чтобы иметь возможность по-другому манипулировать значениями. Например, нам может потребоваться объединить числовые значения со строками или представить десятичные дроби в виде целых чисел.
В этой статье мы расскажем вам о преобразовании чисел, строк, кортежей и списков. Также вы найдете здесь примеры, которые помогут вам понять, в каких случаях может понадобиться преобразование данных.
В Python есть два числовых типа данных: целые числа (integer) и числа с плавающей запятой (float).
Бывает, вы работаете над чужим кодом и вам нужно преобразовать целое число в число с плавающей запятой (и наоборот). Или вы можете обнаружить, что использовали целое число, хотя на самом деле вам нужно число с плавающей запятой. Python имеет встроенные методы, позволяющие легко выполнить все эти преобразования.
Метод Python float()
преобразует целые числа в числа с плавающей запятой. Чтобы использовать эту функцию, добавьте в скобки целое число:
float(57)
В этом случае 57 будет преобразовано в 57.0.
Этот метод можно использовать и с переменной. Объявим f
равным 57, а затем выведем новое значение с плавающей запятой:
f = 57 print(float(f))
Результат:
57.0
Используя функцию float()
, мы можем преобразовывать целые числа в числа с плавающей запятой.
Python также имеет встроенную функцию для преобразования чисел с плавающей запятой в целые числа: int()
.
Функция int()
работает аналогично функции float()
. Чтобы преобразовать десятичную дробь в целое число, вы можете добавить его внутрь скобок:
int(390.8)
В этом случае 390.8 будет преобразовано в 390.
Эту функцию можно использовать и с переменными. Давайте объявим b
равным 125.0, а c
— равным 390.8, а затем применим к переменным функцию int()
:
b = 125.0 c = 390.8 print(int(b)) print(int(c))
Результат:
125 390
При преобразовании чисел с плавающей запятой в целые числа с помощью функции int()
Python отсекает все, что идет после запятой. Мы можем ожидать, что 390,8 округлится до 391, но с применением только лишь функции int()
этого не произойдет.
В Python 3 при делении одного целого числа на другое целое число результат преобразуется в число с плавающей запятой. То есть, если разделить 5 на 2, в Python 3 вы получите число с плавающей запятой:
a = 5 / 2 print(a)
2.5
В Python 2, так как вы имели дело с двумя целыми числами, вы получите ответ в виде целого числа: 5 / 2 = 2. Прочтите «Python 2 vs Python 3: Практические соображения» для получения дополнительной информации о различиях между Python 2 и Python 3.
Тип данных string представляет собой последовательность из одного или нескольких символов (буквы, цифры, символы). Строки — это распространенная форма данных в компьютерных программах. Нам может потребоваться довольно часто преобразовывать строки в числа и наоборот, особенно когда мы получаем данные, созданные пользователем.
Числа в строки можно преобразовать с помощью метода str()
. Мы передаем число или переменную в скобки метода, а на выходе получаем строковое значение.
Давайте сначала рассмотрим преобразование целых чисел. Чтобы преобразовать целое число 12 в строку, передадим его в метод str()
:
str(12)
При запуске str(12)
в интерактивной оболочке Python (чтобы войти в оболочку, введите python
в окне терминала) вы получите следующий вывод:
'12'
Кавычки вокруг числа 12 означают, что оно теперь является строковым значением, а не целым числом.
Практический смысл преобразования чисел в строки становится понятнее, когда вы работаете с переменными. Допустим, мы хотим отслеживать ежедневный прогресс программирования пользователя. Для этого мы вводим, сколько строк кода он пишет за раз. Мы хотели бы давать обратную связь пользователю. Чтобы составить предложение, будем выводить одновременно и строковые, и целочисленные значения:
user = "Sammy" lines = 50 print("Congratulations, " + user + "! You just wrote " + lines + " lines of code.")
Когда мы запускаем этот код, мы получаем следующую ошибку:
TypeError: Can't convert 'int' object to str implicitly
Мы не можем объединять строки и целые числа в Python, поэтому нам придется преобразовать переменную lines
в строковое значение:
user = "Sammy" lines = 50 print("Congratulations, " + user + "! You just wrote " + str(lines) + " lines of code.")
Теперь при запуске кода мы получим следующий вывод, поздравляющий нашего пользователя с прогрессом:
Congratulations, Sammy! You just wrote 50 lines of code.
Если мы хотим преобразовать в строку не целое число, а число с плавающей запятой, порядок действий остается прежним. Мы передаем в метод str()
число с плавающей запятой, а возвращено будет строковое значение. Передавать в метод можно как само число, так и переменную:
print(str(421.034)) f = 5524.53 print(str(f))
'421.034' '5524.53'
Чтобы убедиться, что все правильно, мы можем объединить в выводе преобразованное число и строковые значения:
f = 5524.53 print("Sammy has " + str(f) + " points.")
Sammy has 5524.53 points.
Мы можем быть уверены, что наш float
был правильно преобразован в строку, потому что конкатенация была выполнена без ошибок.
Строки могут быть преобразованы в числа при помощи методов int()
и float()
.
Если в вашей строке нет десятичных знаков, вы, скорее всего, захотите преобразовать ее в целое число с помощью метода int()
.
Давайте возьмем пример пользователя Сэмми, отслеживающего количество написанных строк кода. Чтобы предоставить пользователю более интересную обратную связь, мы можем проводить с полученными значениями какие-то математические действия. Но в настоящее время эти значения хранятся в строках:
lines_yesterday = "50" lines_today = "108" lines_more = lines_today - lines_yesterday print(lines_more)
TypeError: unsupported operand type(s) for -: 'str' and 'str'
Поскольку два числовых значения хранились в строках, мы получили ошибку. Операнд «-» для вычитания не является допустимым операндом для двух строковых значений.
Давайте изменим код, чтобы включить в него метод int()
. Он преобразует строки в целые числа и позволит нам выполнять математические действия со значениями, которые изначально были строками.
lines_yesterday = "50" lines_today = "108" lines_more = int(lines_today) - int(lines_yesterday) print(lines_more)
58
Переменная lines_more
автоматически является целым числом, и в этом примере она равна числовому значению 58.
В приведенном выше примере мы также можем преобразовать строчные значения в числа с плавающей запятой, используя метод float()
вместо метода int()
. В этом случае вместо 58 мы получим число с плавающей запятой — 58.0. Пользователь Сэмми зарабатывает очки в дробных числах:
total_points = "5524.53" new_points = "45.30" new_total_points = total_points + new_points print(new_total_points)
5524.5345.30
В этом случае использование операнда «+» с двумя строками является допустимой операцией. Но эта операция объединяет две строки, а не складывает два числовых значения вместе. В результате наш output выглядит необычно, поскольку это просто два значения рядом друг с другом.
Перед выполнением любых математических операций нам нужно преобразовать эти строки в числа с плавающей запятой с помощью метода float()
:
total_points = "5524.53" new_points = "45.30" new_total_points = float(total_points) + float(new_points) print(new_total_points)
5569.83
Теперь, когда мы преобразовали две строки в числа с плавающей запятой, мы получаем ожидаемый результат: сумму чисел 45.30 и 5524.53.
Если мы попытаемся при помощи метода int()
конвертировать строку, представляющую собой десятичную дробь, в целое число, мы получим ошибку:
f = "54.23" print(int(f))
ValueError: invalid literal for int() with base 10: '54.23'
Преобразование строк в числа позволяет нам быстро изменять тип данных, с которым мы работаем. Благодаря этому мы можем выполнять математические операции с числовыми значениями, изначально сохраненными в строчном виде.
Вы можете использовать методы list()
и tuple()
для преобразования переданных им значений в тип данных списка и кортежа соответственно. В Python:
[ ]
.( )
.Начнем с преобразования списка в кортеж. Поскольку кортеж — это неизменяемый тип данных, такое преобразование может способствовать существенной оптимизации наших программ. Метод tuple()
возвращает «кортежную» версию переданного ему значения.
print(tuple(['pull request', 'open source', 'repository', 'branch']))
('pull request', 'open source', 'repository', 'branch')
Мы видим, что в результате выводится кортеж, поскольку элементы теперь заключены в круглые, а не в квадратные скобки.
Давайте используем tuple()
с переменной, представляющей список:
sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp'] print(tuple(sea_creatures))
('shark', 'cuttlefish', 'squid', 'mantis shrimp')
Опять же, мы видим, что значения списка преобразуются в значения кортежа, что обозначается круглыми скобками.
Мы можем преобразовать в кортеж не только список, но и любой итерируемый тип, включая строки:
print(tuple('Sammy'))
('S', 'a', 'm', 'm', 'y')
Строки можно преобразовывать в кортежи с помощью метода tuple()
, потому что они итерируемые (их можно перебирать). Но с типами данных, которые не являются итерируемыми (пример — целые числа и числа с плавающей запятой), мы получим ошибку:
print(tuple(5000))
TypeError: 'int' object is not iterable
Можно преобразовать целое число в строку, а затем в кортеж: tuple(str(5000))
. Но лучше выбрать читаемый код, а не сложные преобразования.
Преобразование значений, особенно кортежей, в списки может быть полезно, когда вам нужно иметь изменяемую версию этого значения. Для преобразования в список используется метод list()
.
Давайте преобразуем кортеж в список. Будьте внимательны со скобками: одна пара для кортежа, вторая — для метода list()
, а третья — для метода print()
:
print(list(('blue coral', 'staghorn coral', 'pillar coral')))
['blue coral', 'staghorn coral', 'pillar coral']
Квадратные скобки сигнализируют о том, что кортеж, переданный в метод list()
, преобразован в список.
Чтобы сделать код более читабельным, мы можем ввести переменную и удалить одну из пар круглых скобок:
coral = ('blue coral', 'staghorn coral', 'pillar coral') list(coral)
Если мы выведем list(coral)
, мы получим тот же результат, что и выше.
В список можно преобразовать не только кортеж, но и строку:
print(list('shark'))
['s', 'h', 'a', 'r', 'k']
В этой статье мы рассмотрели, как можно преобразовать одни типы данных в другие (в основном, с помощью встроенных методов). Возможность конвертировать типы данных в Python дает вам дополнительную гибкость при написании программ.
Управление памятью - важный, но часто упускаемый из виду аспект программирования. При неправильном подходе оно…
Как возникает круговой импорт? Эта ошибка импорта обычно возникает, когда два или более модуля, зависящих…
Вы когда-нибудь оказывались в ситуации, когда скрипт на Python выполняется очень долго и вы задаетесь…
В этом руководстве мы разберем все, что нужно знать о символах перехода на новую строку…
Блок if __name__ == "__main__" в Python позволяет определить код, который будет выполняться только при…
Давайте разберем, как настроить модульные тесты для экземпляров классов. Мы напишем тесты для проверки функциональности…