Преобразование типов, списки и кортежи в Python

Обновлено:

1. Классы и объекты

На этом уроке рассматриваем пять типов данных:

int
float
str
list
tuple

Каждый из этих типов данных представлен своим классом.

Например:

  • int — класс целых чисел;
  • float — класс вещественных чисел;
  • str — класс строк;
  • list — класс списков;
  • tuple — класс кортежей.

Любой созданный объект является экземпляром определённого класса.

Например:

10

Число 10 — экземпляр класса int.

3.14

Число 3.14 — экземпляр класса float.

'Hello'

Строка 'Hello' — экземпляр класса str.

[1, 2, 3]

Список [1, 2, 3] — экземпляр класса list.

(1, 2, 3)

Кортеж (1, 2, 3) — экземпляр класса tuple.


2. Класс int

int — это класс целых чисел.

Примеры экземпляров класса int:

10
-25
0
1000000

3. Вызов класса int

Класс int можно вызвать:

int()

Если вызвать класс int без аргумента, он вернёт нейтральный объект этого класса:

0

Пример:

number = int()

print(number)

Результат:

0

4. Преобразование строки в int

С помощью класса int можно преобразовать строку с целым числом в объект класса int.

number = int('25')

print(number)

Результат:

25

До преобразования:

'25'

это строка.

После преобразования:

25

это целое число.

Ещё примеры:

int('100')

Результат:

100
int('-50')

Результат:

-50
int('0')

Результат:

0

5. Преобразование float в int

С помощью класса int можно преобразовать вещественное число в целое число.

int(3.14)

Результат:

3

Во время такого преобразования дробная часть отбрасывается.

int(9.99)

Результат:

9
int(-5.8)

Результат:

-5

Класс int не округляет число, а просто убирает дробную часть.


6. Какие строки нельзя преобразовать в int

Строку с вещественным числом нельзя напрямую преобразовать в int.

int('3.14')

Будет ошибка:

ValueError

Строку с обычным текстом также нельзя преобразовать в int.

int('Hello')

Будет ошибка:

ValueError

На данном этапе строку с шестнадцатеричным числом мы тоже преобразовать не умеем:

int('FF')

Будет ошибка:

ValueError

В дальнейшем мы познакомимся с другими вариантами использования класса int, но пока используем только обычные целые числа.


7. Класс float

float — это класс вещественных чисел.

Примеры экземпляров класса float:

3.14
-5.5
0.0
1000.25

8. Вызов класса float

Класс float можно вызвать без аргумента:

float()

Результат:

0.0

Пример:

number = float()

print(number)

Результат:

0.0

9. Преобразование строки в float

С помощью класса float можно преобразовать строку с вещественным числом в объект класса float.

number = float('3.14')

print(number)

Результат:

3.14

Строку с целым числом тоже можно преобразовать в float:

float('10')

Результат:

10.0

Ещё примеры:

float('-5.5')

Результат:

-5.5
float('0')

Результат:

0.0

10. Преобразование int в float

Целое число можно преобразовать в вещественное:

float(10)

Результат:

10.0
float(-25)

Результат:

-25.0
float(0)

Результат:

0.0

11. Какие строки нельзя преобразовать в float

Строку с обычным текстом нельзя преобразовать в float.

float('Hello')

Будет ошибка:

ValueError

На данном этапе строку с шестнадцатеричным числом мы также преобразовать не умеем:

float('FF')

Будет ошибка:

ValueError

12. Класс str

str — это класс строк.

Примеры экземпляров класса str:

'Hello'
"Python"
'123'
'3.14'
''

Цифры внутри кавычек являются строкой:

'100'

Без кавычек это число:

100

13. Вызов класса str

Класс str можно вызвать без аргумента:

str()

Он вернёт пустую строку:

''

Пример:

text = str()

print(text)

Функция print() выведет пустую строку.


14. Преобразование int в str

С помощью класса str целое число можно преобразовать в строку.

number = 123
text = str(number)

Теперь в переменной text находится:

'123'

Пример:

number = 123
text = str(number)

print(text)

Результат:

123

Функция print() выводит строку без кавычек.


15. Преобразование float в str

Вещественное число тоже можно преобразовать в строку:

number = 3.14
text = str(number)

Теперь в переменной text находится:

'3.14'

Ещё пример:

temperature = -5.5
temperature_text = str(temperature)

print(temperature_text)

Результат:

-5.5

16. Для чего преобразовывать число в строку

Функция len() не работает с числами:

len(1234)

Будет ошибка.

Но число можно сначала преобразовать в строку:

len(str(1234))

Результат:

4

Сначала:

str(1234)

создаёт строку:

'1234'

После этого:

len('1234')

возвращает количество символов:

4

17. Проверка длины PIN-кода

Предположим, PIN-код уже хранится в виде целого числа:

pin_code = 1234

Напрямую передать число в len() нельзя:

len(pin_code)

Будет ошибка.

Сначала нужно преобразовать число в строку:

pin_code_length = len(str(pin_code))

print(pin_code_length)

Результат:

4

Мы узнали, что PIN-код состоит из четырёх цифр.

Полную проверку правильности длины мы научимся писать позже, когда познакомимся с операторами сравнения.


18. Проверка длины номера телефона

Предположим, номер телефона хранится как целое число:

phone_number = 79991234567

Чтобы определить количество цифр, сначала преобразуем число в строку:

phone_number_length = len(str(phone_number))

print(phone_number_length)

Результат:

11

Таким способом можно узнать количество цифр в числе.

Полную проверку номера телефона мы напишем позже.


19. Класс list

list — это класс списков.

Список позволяет хранить несколько объектов.

Пример списка:

[10, 20, 30]

Это один список, внутри которого находятся три целых числа.


20. Создание пустого списка

Пустой список создаётся с помощью квадратных скобок:

[]

Пример:

numbers = []

print(numbers)

Результат:

[]

Класс list также можно вызвать без аргумента:

list()

Результат:

[]

Эти две записи создают пустой список:

[]
list()

21. Список с одним объектом

Список может содержать один объект:

[10]
[3.14]
['Hello']

Пример:

numbers = [10]

print(numbers)

Результат:

[10]

22. Список с несколькими объектами

Список может содержать несколько объектов:

[10, 20, 30]
['Hello', 'Python', 'World']
[1.5, 2.5, 3.5]

Объекты внутри списка разделяются запятыми.


23. Однородные данные в списке

В списке могут находиться объекты одного типа.

Список целых чисел:

[10, 20, 30]

Список вещественных чисел:

[1.5, 2.5, 3.5]

Список строк:

['Hello', 'Python', 'World']

Такие списки содержат однородные данные.


24. Неоднородные данные в списке

В одном списке могут находиться объекты разных изученных типов:

[10, 3.14, 'Hello']

В этом списке находятся:

  • объект класса int;
  • объект класса float;
  • объект класса str.

Ещё пример:

data = ['Python', 25, 99.5]

print(data)

Результат:

['Python', 25, 99.5]

25. Размер списка

Список может содержать большое количество объектов.

Например:

[1, 2, 3, 4, 5]

Или значительно больше.

Основным ограничением размера списка является количество доступной оперативной памяти компьютера.


26. Сложение списков

Список можно складывать только с другим списком.

[1, 2] + [3, 4]

Результат:

[1, 2, 3, 4]

При сложении списки объединяются.

Ещё пример:

first_list = ['Hello']
second_list = ['Python']

result = first_list + second_list

print(result)

Результат:

['Hello', 'Python']

Логика сложения списков похожа на сложение строк:

'Hello' + 'Python'
['Hello'] + ['Python']

27. Ошибка при сложении списка с другим типом

Список нельзя сложить со строкой:

[1, 2] + 'Hello'

Будет ошибка.

Список нельзя сложить с целым числом:

[1, 2] + 10

Будет ошибка.

Список складывается только со списком:

[1, 2] + [10]

28. Умножение списка

Список можно умножить на целое число:

[1, 2] * 3

Результат:

[1, 2, 1, 2, 1, 2]

Объекты списка повторились три раза.

Ещё пример:

['Hello'] * 2

Результат:

['Hello', 'Hello']

Логика похожа на умножение строки:

'Hello' * 2
['Hello'] * 2

29. На что нельзя умножать список

Список нельзя умножить на вещественное число:

[1, 2] * 2.5

Будет ошибка.

Список нельзя умножить на строку:

[1, 2] * '3'

Будет ошибка.

Список можно умножать только на целое число:

[1, 2] * 3

30. Строка внутри списка

Создадим переменную со строкой:

s = 'Hello'

Если положить переменную s внутрь квадратных скобок:

result = [s]

получится список с одним объектом:

['Hello']

Пример:

s = 'Hello'
result = [s]

print(result)

Результат:

['Hello']

В списке находится одна целая строка.


31. Преобразование строки в список

Строку можно преобразовать в список с помощью класса list.

s = 'Hello'
result = list(s)

Результат:

['H', 'e', 'l', 'l', 'o']

Каждый символ строки стал отдельным объектом списка.

Полный пример:

s = 'Hello'
result = list(s)

print(result)

Результат:

['H', 'e', 'l', 'l', 'o']

32. Разница между [s] и list(s)

Создадим строку:

s = 'Hello'

Поместим её внутрь списка:

first_result = [s]

Результат:

['Hello']

В списке находится один объект — целая строка 'Hello'.

Теперь преобразуем строку с помощью класса list:

second_result = list(s)

Результат:

['H', 'e', 'l', 'l', 'o']

Каждый символ стал отдельным объектом.

Полный пример:

s = 'Hello'

first_result = [s]
second_result = list(s)

print(first_result)
print(second_result)

Результат:

['Hello']
['H', 'e', 'l', 'l', 'o']

Это разные действия.


33. Класс tuple

tuple — это класс кортежей.

Кортеж, как и список, позволяет хранить несколько объектов.

Пример кортежа:

(10, 20, 30)

34. Создание пустого кортежа

Пустой кортеж создаётся с помощью круглых скобок:

()

Пример:

numbers = ()

print(numbers)

Результат:

()

Класс tuple также можно вызвать без аргумента:

tuple()

Результат:

()

Эти две записи создают пустой кортеж:

()
tuple()

35. Кортеж с несколькими объектами

Кортеж может содержать несколько объектов:

(10, 20, 30)
('Hello', 'Python', 'World')
(1.5, 2.5, 3.5)

Объекты внутри кортежа разделяются запятыми.


36. Однородные данные в кортеже

В кортеже могут находиться объекты одного типа.

Кортеж целых чисел:

(10, 20, 30)

Кортеж вещественных чисел:

(1.5, 2.5, 3.5)

Кортеж строк:

('Hello', 'Python', 'World')

37. Неоднородные данные в кортеже

Кортеж может содержать объекты разных изученных типов:

(10, 3.14, 'Hello')

В кортеже находятся:

  • объект класса int;
  • объект класса float;
  • объект класса str.

38. Кортеж с одним объектом

Рассмотрим запись:

(5)

Круглые скобки в этом случае используются для задания приоритета.

Результатом будет обычное целое число:

5

Чтобы создать кортеж с одним объектом, после объекта нужно поставить запятую:

(5,)

Это кортеж с одним объектом.

Пример со строкой:

('Hello',)

Главное отличие — запятая после объекта.

Правильно:

single_number = (5,)
single_text = ('Hello',)

39. Разные значения круглых скобок

Круглые скобки в Python используются по-разному.

Для задания приоритета математических операций:

(10 + 5) * 2

Для вызова функции или класса:

print('Hello')
len('Hello')
int('25')

Для создания кортежа:

(10, 20, 30)

Значение круглых скобок зависит от ситуации, в которой они используются.


40. Сложение кортежей

Кортеж можно складывать только с другим кортежем.

(1, 2) + (3, 4)

Результат:

(1, 2, 3, 4)

При сложении кортежи объединяются.

Ещё пример:

first_tuple = ('Hello',)
second_tuple = ('Python',)

result = first_tuple + second_tuple

print(result)

Результат:

('Hello', 'Python')

41. Ошибка при сложении кортежа с другим типом

Кортеж нельзя сложить со списком:

(1, 2) + [3, 4]

Будет ошибка.

Кортеж нельзя сложить со строкой:

(1, 2) + 'Hello'

Будет ошибка.

Кортеж складывается только с кортежем:

(1, 2) + (3, 4)

42. Умножение кортежа

Кортеж можно умножить на целое число:

(1, 2) * 3

Результат:

(1, 2, 1, 2, 1, 2)

Ещё пример:

('Hello',) * 2

Результат:

('Hello', 'Hello')

43. На что нельзя умножать кортеж

Кортеж нельзя умножить на вещественное число:

(1, 2) * 2.5

Будет ошибка.

Кортеж нельзя умножить на строку:

(1, 2) * '3'

Будет ошибка.

Кортеж можно умножать только на целое число:

(1, 2) * 3

44. Строка внутри кортежа

Создадим строку:

s = 'Hello'

Чтобы поместить целую строку в кортеж как один объект, нужно написать:

result = (s,)

Результат:

('Hello',)

Полный пример:

s = 'Hello'
result = (s,)

print(result)

Результат:

('Hello',)

В кортеже находится один объект — строка 'Hello'.


45. Преобразование строки в кортеж

Строку можно преобразовать в кортеж с помощью класса tuple.

s = 'Hello'
result = tuple(s)

Результат:

('H', 'e', 'l', 'l', 'o')

Каждый символ строки стал отдельным объектом кортежа.

Полный пример:

s = 'Hello'
result = tuple(s)

print(result)

Результат:

('H', 'e', 'l', 'l', 'o')

46. Разница между (s,) и tuple(s)

Создадим строку:

s = 'Hello'

Поместим её в кортеж как один объект:

first_result = (s,)

Результат:

('Hello',)

Преобразуем строку с помощью класса tuple:

second_result = tuple(s)

Результат:

('H', 'e', 'l', 'l', 'o')

Полный пример:

s = 'Hello'

first_result = (s,)
second_result = tuple(s)

print(first_result)
print(second_result)

Результат:

('Hello',)
('H', 'e', 'l', 'l', 'o')

47. Преобразование списка в кортеж

Список можно преобразовать в кортеж с помощью класса tuple.

numbers = [10, 20, 30]
result = tuple(numbers)

Результат:

(10, 20, 30)

Полный пример:

numbers = [10, 20, 30]
result = tuple(numbers)

print(result)

Результат:

(10, 20, 30)

48. Преобразование кортежа в список

Кортеж можно преобразовать в список с помощью класса list.

numbers = (10, 20, 30)
result = list(numbers)

Результат:

[10, 20, 30]

Полный пример:

numbers = (10, 20, 30)
result = list(numbers)

print(result)

Результат:

[10, 20, 30]

49. Сравнение списка и кортежа

Список:

[10, 20, 30]

Кортеж:

(10, 20, 30)

На первый взгляд различаются скобки:

Список — квадратные скобки
Кортеж — круглые скобки

Но основное различие связано с возможностями этих объектов.


50. Изменяемый список

Список — изменяемый объект.

В дальнейшем мы познакомимся с методами, которые позволяют:

  • добавлять объекты в список;
  • удалять объекты из списка;
  • изменять содержимое списка;
  • выполнять другие действия со списком.

На этом уроке методы списков мы пока не используем.


51. Неизменяемый кортеж

Кортеж — неизменяемый объект.

После создания кортежа его содержимое нельзя изменить.

Кортеж в основном используется для хранения данных, которые не должны изменяться.

Методы кортежей на этом уроке мы не рассматриваем.


52. Список и кортеж: простое сравнение

Список можно сравнить с обычным универсальным автомобилем.

В нём больше возможностей и дополнительного оборудования. Благодаря этому его удобно использовать в разных ситуациях, но он немного тяжелее.

Кортеж можно сравнить с лёгким автомобилем, из которого убрали всё лишнее.

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

В Python:

  • список можно изменять;
  • кортеж изменять нельзя;
  • список имеет больше возможностей для работы с содержимым;
  • кортеж обычно занимает немного меньше оперативной памяти;
  • кортеж в некоторых операциях может работать немного быстрее списка.

На начальном этапе главное различие:

list — изменяемый
tuple — неизменяемый

53. Распаковка списка

Объекты из списка можно записать в отдельные переменные с помощью множественного присваивания.

Создадим список:

numbers = [10, 20, 30]

Распакуем его:

a, b, c = numbers

Теперь:

a получает 10
b получает 20
c получает 30

Полный пример:

numbers = [10, 20, 30]

a, b, c = numbers

print(a)
print(b)
print(c)

Результат:

10
20
30

54. Распаковка списка с разными типами

Список может содержать объекты разных изученных типов:

data = ['Python', 25, 99.5]

Распакуем список:

language, age, price = data

Теперь:

language получает 'Python'
age получает 25
price получает 99.5

55. Распаковка кортежа

Кортеж тоже можно распаковать с помощью множественного присваивания.

numbers = (10, 20, 30)

a, b, c = numbers

Теперь:

a получает 10
b получает 20
c получает 30

Полный пример:

numbers = (10, 20, 30)

a, b, c = numbers

print(a)
print(b)
print(c)

Результат:

10
20
30

56. Количество переменных при распаковке

Количество переменных должно совпадать с количеством объектов внутри списка или кортежа.

Правильно:

numbers = [10, 20, 30]

a, b, c = numbers

Три объекта и три переменные.

Неправильно:

numbers = [10, 20, 30]

a, b = numbers

Три объекта и только две переменные.

Будет ошибка:

ValueError

Неправильно:

numbers = (10, 20)

a, b, c = numbers

Два объекта и три переменные.

Будет ошибка:

ValueError

57. Основные результаты урока

Теперь мы знакомы с пятью типами данных:

int
float
str
list
tuple

Мы знаем, что объекты являются экземплярами классов.

Мы умеем вызывать классы без аргументов:

int()
float()
str()
list()
tuple()

Результаты:

0
0.0
''
[]
()

Мы умеем преобразовывать объекты:

int('25')
float('3.14')
str(100)
list('Hello')
tuple('Hello')
tuple([1, 2, 3])
list((1, 2, 3))

Мы умеем создавать списки и кортежи, складывать их, умножать на целое число и распаковывать в отдельные переменные.


Домашнее задание

Часть 1. Классы int, float и str

Задание 1

Вызвать без аргументов пять изученных классов:

int()
float()
str()
list()
tuple()

Записать результат каждого вызова.


Задание 2

Преобразовать строки в целые числа:

'25'
'-100'
'0'

Результаты сохранить в переменные с понятными именами и вывести через print().


Задание 3

Преобразовать вещественные числа в целые:

3.14
9.99
-7.8

Перед выполнением записать предполагаемый результат каждого преобразования.


Задание 4

Преобразовать в float:

'3.14'
'10'
25
'-5.5'

Результаты вывести через print().


Задание 5

Преобразовать в строки:

100
-25
3.14
0.0

Сохранить результаты в отдельные переменные.


Задание 6

Определить, какие преобразования приведут к ошибке:

int('25')
int('3.14')
int('Hello')
int(5.9)
float('10')
float('3.14')
float('Python')
int('FF')

Для каждого ошибочного примера написать причину ошибки.


Задание 7

Создать переменную:

pin_code = 5678

Преобразовать PIN-код в строку и с помощью len() определить количество цифр.

Результат сохранить в переменную:

pin_code_length

Задание 8

Создать переменную с номером телефона, записанным без пробелов, скобок и дефисов.

С помощью str() и len() определить количество цифр.

Полную проверку с операторами сравнения писать не нужно.


Часть 2. Списки

Задание 9

Создать:

  1. пустой список с помощью квадратных скобок;
  2. пустой список с помощью класса list;
  3. список с одним целым числом;
  4. список с одной строкой;
  5. список с тремя целыми числами;
  6. список с тремя строками;
  7. список с объектами разных изученных типов.

Каждый список сохранить в отдельную переменную.


Задание 10

Сложить списки:

[1, 2] + [3, 4]
['Hello'] + ['Python']
[10] + [20, 30]

Перед выполнением записать предполагаемый результат.


Задание 11

Умножить списки:

[1, 2] * 3
['Python'] * 2
[10, 20, 30] * 2

Задание 12

Определить, какие выражения приведут к ошибке:

[1, 2] + [3, 4]
[1, 2] + 'Hello'
[1, 2] + 10
[1, 2] * 3
[1, 2] * 2.5
[1, 2] * '3'

Задание 13

Создать переменную:

s = 'Python'

Получить два разных списка:

  1. список, содержащий одну целую строку;
  2. список, в котором каждый символ строки является отдельным объектом.

Вывести оба результата и объяснить разницу.


Часть 3. Кортежи

Задание 14

Создать:

  1. пустой кортеж с помощью круглых скобок;
  2. пустой кортеж с помощью класса tuple;
  3. кортеж с одним целым числом;
  4. кортеж с одной строкой;
  5. кортеж с тремя целыми числами;
  6. кортеж с тремя строками;
  7. кортеж с объектами разных изученных типов.

Задание 15

Определить, что будет создано в каждом случае:

(5)
(5,)
('Hello')
('Hello',)

Объяснить назначение запятой в кортеже с одним объектом.


Задание 16

Сложить кортежи:

(1, 2) + (3, 4)
('Hello',) + ('Python',)
(10,) + (20, 30)

Задание 17

Умножить кортежи:

(1, 2) * 3
('Python',) * 2
(10, 20, 30) * 2

Задание 18

Определить, какие выражения приведут к ошибке:

(1, 2) + (3, 4)
(1, 2) + [3, 4]
(1, 2) + 'Hello'
(1, 2) * 3
(1, 2) * 2.5
(1, 2) * '3'

Задание 19

Создать переменную:

s = 'Python'

Получить два разных кортежа:

  1. кортеж, содержащий одну целую строку;
  2. кортеж, в котором каждый символ строки является отдельным объектом.

Вывести оба результата и объяснить разницу.


Часть 4. Преобразование списков и кортежей

Задание 20

Преобразовать список:

[10, 20, 30]

в кортеж.

Результат сохранить в переменную и вывести через print().


Задание 21

Преобразовать кортеж:

('Hello', 'Python', 'World')

в список.

Результат сохранить в переменную и вывести.


Задание 22

Создать список:

data = [10, 3.14, 'Hello']

Преобразовать его в кортеж.

Затем полученный кортеж снова преобразовать в список.

Вывести все три объекта:

  1. первоначальный список;
  2. кортеж;
  3. новый список.

Часть 5. Распаковка

Задание 23

Создать список:

numbers = [10, 20, 30]

Распаковать его в переменные:

a
b
c

Вывести значения всех переменных.


Задание 24

Создать кортеж:

data = ('Python', 25, 99.5)

Распаковать его в три переменные с понятными именами.

Вывести значения переменных.


Задание 25

Определить, какие варианты распаковки приведут к ошибке:

numbers = [1, 2, 3]
a, b, c = numbers
numbers = [1, 2, 3]
a, b = numbers
numbers = (10, 20)
a, b = numbers
numbers = (10, 20)
a, b, c = numbers

Объяснить ошибки через количество переменных и объектов.


Часть 6. Практическая задача

Задание 26

Создать отдельный файл:

data_types_practice.py

В программе необходимо:

  1. добавить комментарий с описанием программы;
  2. создать по одному объекту классов int, float и str;
  3. преобразовать целое число в float;
  4. преобразовать вещественное число в int;
  5. преобразовать число в строку;
  6. с помощью len() определить количество символов в строке с числом;
  7. создать список с тремя объектами;
  8. преобразовать список в кортеж;
  9. преобразовать полученный кортеж обратно в список;
  10. распаковать список с тремя объектами в три переменные;
  11. вывести результаты через отдельные вызовы print();
  12. использовать только изученные классы, функции и операции.

Названия переменных должны быть понятными и записанными в стиле snake_case.