Преобразование типов, списки и кортежи в 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
Создать:
- пустой список с помощью квадратных скобок;
- пустой список с помощью класса
list; - список с одним целым числом;
- список с одной строкой;
- список с тремя целыми числами;
- список с тремя строками;
- список с объектами разных изученных типов.
Каждый список сохранить в отдельную переменную.
Задание 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'
Получить два разных списка:
- список, содержащий одну целую строку;
- список, в котором каждый символ строки является отдельным объектом.
Вывести оба результата и объяснить разницу.
Часть 3. Кортежи
Задание 14
Создать:
- пустой кортеж с помощью круглых скобок;
- пустой кортеж с помощью класса
tuple; - кортеж с одним целым числом;
- кортеж с одной строкой;
- кортеж с тремя целыми числами;
- кортеж с тремя строками;
- кортеж с объектами разных изученных типов.
Задание 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'
Получить два разных кортежа:
- кортеж, содержащий одну целую строку;
- кортеж, в котором каждый символ строки является отдельным объектом.
Вывести оба результата и объяснить разницу.
Часть 4. Преобразование списков и кортежей
Задание 20
Преобразовать список:
[10, 20, 30]
в кортеж.
Результат сохранить в переменную и вывести через print().
Задание 21
Преобразовать кортеж:
('Hello', 'Python', 'World')
в список.
Результат сохранить в переменную и вывести.
Задание 22
Создать список:
data = [10, 3.14, 'Hello']
Преобразовать его в кортеж.
Затем полученный кортеж снова преобразовать в список.
Вывести все три объекта:
- первоначальный список;
- кортеж;
- новый список.
Часть 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
В программе необходимо:
- добавить комментарий с описанием программы;
- создать по одному объекту классов
int,floatиstr; - преобразовать целое число в
float; - преобразовать вещественное число в
int; - преобразовать число в строку;
- с помощью
len()определить количество символов в строке с числом; - создать список с тремя объектами;
- преобразовать список в кортеж;
- преобразовать полученный кортеж обратно в список;
- распаковать список с тремя объектами в три переменные;
- вывести результаты через отдельные вызовы
print(); - использовать только изученные классы, функции и операции.
Названия переменных должны быть понятными и записанными в стиле snake_case.