Преобразование типов данных

При написании программ часто возникает необходимость изменить тип данных, чтобы иметь возможность по-другому манипулировать значениями. Например, нам может потребоваться объединить числовые значения со строками или представить десятичные дроби в виде целых чисел.

В этой статье мы расскажем вам о преобразовании чисел, строк, кортежей и списков. Также вы найдете здесь примеры, которые помогут вам понять, в каких случаях может понадобиться преобразование данных.

Преобразование числовых типов

В Python есть два числовых типа данныхцелые числа (integer) и числа с плавающей запятой (float). 

Бывает, вы работаете над чужим кодом и вам нужно преобразовать целое число в число с плавающей запятой (и наоборот). Или вы можете обнаружить, что использовали целое число, хотя на самом деле вам нужно число с плавающей запятой. 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']