Типи і структури даних 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}