Типи і структури даних Python#
Змінні в Python#
Змінна в мові програмування − це назва для зарезервованого місця в пам’яті комп’ютера, призначене для зберігання значень.
Це означає, що при створенні змінної резервується певне місце в пам’яті комп’ютера.
Грунтуючись на типі даних змінної, інтерпретатор виділяє необхідну кількість пам’яті і вирішує, що може перебувати в зарезервованої області пам’яті.
В Python оголошення відбувається автоматично (це називається динамічна типізація), коли присвоюється значення змінній.
Знак рівності =
використовується для присвоєння значення змінній.
Операнд по ліву сторону від знака рівності =
це ім’я змінної, операнд по праву сторону - значення присвоєне цієї змінної.
Наприклад:
country = "Swiss" # Присвоїти значення Swiss змінній під назвою country
age = 23 # Присвоєннязначення 23 зміннійage
print (country)
print (age)
Swiss
23
Множинне присвоювання значень#
В Python можливо присвоювати одне значення декільком змінним відразу. Наприклад:
a = b = c = 1
print(a)
print(b)
print(c)
1
1
1
Створюється об’єкт зі значенням 1, і все 3 змінні вказують на область в пам’яті, в якій він знаходиться.
Вбудовані типи даних в Python:#
Інформація, збережена в пам’яті може бути різних типів даних. Наприклад, вік людини може бути числовим значенням, а його адреса — літерно-числовим. В Python існує безліч стандартних типів даних, які використовуються для зберігання певних значень і мають своїспецифічні методи. До стандартних типів даних в Python відносять:
Числа (Numbers: int, float, complex)
Рядок (String: str)
Список (List: list)
Кортеж (Tuple: tuple)
Множини (Set: set)
Словник (Dictionary: dict)
Всі перераховані типи даних діляться на змінювані і незмінні. Багато з вбудованих типів даних Python — це типи незмінних об’єктів:
числові дані (
int
,float
,complex
)символьні рядки (
class
,str
)кортежі (
tuple
).
Інші типи визначені як змінювані: списки (list
), множини (set
), словники (dict
).
Числовий тип даних в Python#
Числовий тип даних в Python призначений для зберігання числових значень. Числові об’єкти створюються, коли їм присвоюється значення.
Приклад:
num1 = 1
num2 = 2
Також можна видалити числовий об’єкт за допомогою ключового слова del
.
Синтаксис команди del
наступний:
del num1 # видаляє змінну num1
del num2, num3 # видаляє обидві змінні num2 за num3 за раз
В Python є чотири види числового типу даних:
int
— ціле число
long
— довге ціле число
float
— число з плаваючою точкою: -0.2, 0.0, 3.14159265 і т.д.
complex
— комплексне число
Приклади видів числового типу даних наведені в Табл.1:
Таблиця 1. — Приклади числових типів даних.
int |
long |
float |
complex |
---|---|---|---|
1 |
51924361L |
0.0 |
3.14j |
102 |
-0x19323L |
15.20 |
45.j |
-786 |
0122L |
-21.9 |
9.322e-36j |
0 |
0xDEFABCECBDAECBFBAEl |
32.3+e18 |
.876j |
0b10 |
535633629843L |
-90. |
-.6545+0J |
-0x260 |
-052318172735L |
-32.54e100 |
3e+26J |
0x69 |
-4721885298529L |
70.2-E12 |
4.53e-7j |
Для перетворення чисел з дійсних в цілі і навпаки в Python визначені функції int()
і float()
.
Наприклад:
print(int(10.58))
print(float(10))
10
10.0
Операції з числами наведені в Додатку 4.
Крім того, в Python для операцій з числами використовуються функції:
abs()
— обчислення абсолютного значення — модуля
abs(-3)
3
pow()
— піднесення до степеня
pow(2,3)
8
divmod()
— обчислення результату цілочисельного ділення і залишку
divmod(17,5)
(3, 2)
round()
— округлення
round(100.0/6)
17
Ці функції є “вбудованними”, що означає, що для використання немає необхідності підключати додаткові модулі.
Всі інші функції для роботи з числами (математичні), такі як обчислення квадратного кореня, синуса і ін. вимагають підключення модуля math
.
Логічні значення в Python представлені двома величинами — логічними константами True
(Істина) і False
(Хибність).
Логічні значення виходять в результаті логічних операцій і обчислення логічних виразів.
Більш докладно логічні операції і операції порівняння описані в Додатку 4.
Структури даних#
Мова Python включає в себе всі необхідні структури для побудови ПЗ:
рядки
списки
кортежі
словники
множини
Структури даних використовуються для зберігання зв’язаних даних, які визначені як послідовності. Послідовності, в свою чергу, поділяються на змінювані і незмінні. Під змінністю послідовності розуміється можливість додавати або видаляти елементи цієї послідовності (тобто змінювати кількість елементів послідовності). Для структур даних в Python визначені функції (операції) і методи, принципової різниці між якими немає, а є відмінності в правилах написання.
Рядки#
Рядок — це послідовність символів з довільним доступом.
Рядки в мові Python неможливо змінити — в цьому випадку говорять, що це immutable
тип.
Спроба змінити символ в певній позиції або підрядок викличе помилку.
В Python рядки і символи потрібно брати в лапки (одиночні або подвійні).
Елементи (символи) в рядку нумеруються, починаючи з нуля.
Одиночний символ — буква — є «з точки зору Python» рядком, що складається з одного елемента.
Максимально можлива кількість символів в рядку (довжина рядка) в Python обмежується тільки доступним об’ємом пам’яті.
Так що текст будь-якого розумного розміру (наприклад, кілька тисяч сторінок) може бути записаний в
один рядок Python.
Числа можуть бути перетворені в рядки за допомогою функції str()
.
Наприклад:
str(123)
'123'
Можна отримати будь-який символ рядка по його індексу. Для визначення підрядка використовується такий механізм як зріз — два індекса, розділені двокрапкою:
word = 'strength'
word[4]
'n'
word[0:2]
'st'
word[2:4]
're'
Робота з рядками більш детально описана в Лабораторній роботі №4.
Список#
Список — упорядкований набір елементів, які можуть бути об’єктами різних типів (числа, рядки, інші списки і кортежі). Елементи списку перераховуються через кому. Сам список береться в квадратні дужки. Список є змінною структурою даних, що дозволяє видаляти і додавати елементи, тобто його можна модифікувати. Елементи списку можуть бути різного типу. Також списки підтримують вкладеність.
lst = ['one', 'two', [1, 2, 3]] # Приклад створення списку
lst
['one', 'two', [1, 2, 3]]
Методи списку:
append(x)
— додає елемент в кінець списку;
extend(list)
— розширює список, додаючи в кінець списку елементи іншого списку;
insert(i, x)
— вставляє елемент на місце за індексомi
;
remove(x)
— видаляє перший елемент списку співпав зі значеннямx
;
pop(x)
— видаляє перший елемент і повертає його;
index(x, [start [, end]])
— повертає індекс першого збігається елемента зx
від індексуstart
доend
;
count(x)
— повертає кількість елементів збігаються зx
;
sort([функція порівняння])
— сортування елементів списку;
reverse()
— розгортає список;
copy()
— повертається копія списку;
clear()
— очищає список;
len()
— довжина списку;
Так само списки підтримують арифметичні складання, де:
список + список — об'єднання списків;
список * число — повторення списку n раз.
Для перевірки, чи є елемент частиною списку, можна використовувати оператор in
:
lst = ['one','two']
'one' in lst
True
До списків можна звертатися, використовуючи індекси і зрізи:
lst = [1, 2, 3, 4, 5, 6]
lst.append('seven')
lst
[1, 2, 3, 4, 5, 6, 'seven']
lst[7]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-32-920be0e20a2b> in <module>
----> 1 lst[7]
IndexError: list index out of range
lst[6]
'seven'
Варто відмітити, що індексація йде,починаючи з нуля, а не з 1,що говорить повідомлення:
IndexError: list index out of range.
Зрізи#
Списки підтримують зрізи.
Зріз — витяг з рядка одного символу або деякого фрагмента підрядка.
За замовчуванням, синтаксис зрізу наступний: [start : stop : step]
Де останній аргумент не є обов’язковим. Також якщо вказувати від’ємні параметри, то зріз буде починатися з кінця.
Приклад:
lst = [1, 2, 3, 4, 5, 6, 7]
lst[1:]
[2, 3, 4, 5, 6, 7]
lst[3:5]
[4, 5]
lst[3:-2]
[4, 5]
lst[::2]
[1, 3, 5, 7]
Більш детальну інформацію про роботу зі списками можна отримати з [1], стр.71-80 і [2], стр.5-15.
Кортежі#
Кортежі служать для зберігання кількох об’єктів разом. Їх можна розглядати як аналог списків, але без такої великої функціональності, яку надає клас списку. Одна з найважливіших особливостей кортежів полягає в тому, що вони незмінні, так само, як і рядки. Тобто модифікувати кортежі неможливо. Кортежі зазвичай використовуються в тих випадках, коли оператор або призначена для користувача функція повинні напевно знати, що набір значень, тобто кортеж значень, не зміниться. Кортежі позначаються зазначенням елементів, розділених комами; за бажанням, їх можна ще укласти в круглі дужки.
tup = (1, 2, 3, 4, 5, 6, 7)
Для кортежів необов’язково наявність дужок, тобто вони можуть бути записані як:
tup = 1, 2, 3, 4, 5, 6
print(tup)
(1, 2, 3, 4, 5, 6)
Хоча дужки і не є обов’язковими, краще вказувати їх, щоб було очевидно, що це кортеж, особливо в двозначних випадках.
Наприклад:
print(1, 2, 3)
1 2 3
print((1, 2, 3))
(1, 2, 3)
Роблять різні речі: перше вираження виводить три числа, тоді як друге - кортеж, що містить ці три числа. Кортежі, як і списки, підтримують додавання і множення:
tup + (7, 8, 9)
(1, 2, 3, 4, 5, 6, 7, 8, 9)
tup * 2
(1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6)
Варто відзначити, що кортеж можна створити з ітерованого об’єкта:
tup = tuple('Hello!')
tup
('H', 'e', 'l', 'l', 'o', '!')
Для роботи з кортежами доступні два методи:
count(x)
— повертає кількістьx
в кортежі;
index(x)
— повертає індекс першого-ліпшогоx
.
Більш детальну інформацію про роботу з кортежами можна отримати з [2], стр.12-15. До кортежів, як і до списків, застосовне поняття упаковки і розпаковування елементів:
tup = 1, 2, 3
a, b, c = tup
print(a, b, c)
1 2 3
list = [1, 2, 3]
d, e, f = list
print(d, e, f)
1 2 3
Кортеж можна перетворити в список, як власне і список в кортеж:
list = [1, 2, 3]
tup = tuple(list)
tup
(1, 2, 3)
Множини#
Множина в мові Python — це структура даних, еквівалентна множинам в математиці. Множина може складатися з різних елементів, порядок елементів у множині невизначений. У множину можна додавати і видаляти елементи, можна перебирати елементи множини, можна виконувати операції над множинами (об’єднання, перетин, різниця). Можна перевіряти приналежність елемента множині.
На відміну від масивів, де елементи зберігаються у вигляді послідовного списку, у множинах порядок зберігання елементів невизначений (більш того, елементи множини зберігаються не підряд, як в списку, а за допомогою хитрих алгоритмів).
Це дозволяє виконувати операції типу “перевірити приналежність елемента множині” швидше, ніж просто перебираючи всі елементи множини.
Елементами множини може бути будь-який незмінний тип даних: числа, рядки, кортежі.
Не можна зробити елементом множини список (але можна зробити кортеж) або іншу множину.
Вимога незмінності елементів множини накладається особливостями подання множини в пам’яті комп’ютера.
Для створення множини можна використовувати фігурні дужки або функцію set()
.
Для створення порожнього набору потрібно використовувати set()
, але не {}
, тому що фігурні дужки в даному випадку створюють інший тип даних — порожній словник.
Способи створення множин:
print(set([3, 6, 3, 5]))
{3, 5, 6}
Множини можна створювати на основі списків. Зверніть увагу, що в момент створення множини зі списку будуть видалені повторювані елементи. Це відмінний спосіб очистити список від повторів:
list(set([3, 6, 3, 5]))
[3, 5, 6]
Функція range()
дозволяє створювати множини з діапазону:
print(set(range(10)))
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}