НМЦ

Програмування мовою Python: основи та практика

Електронний посібник

ВФПО

ТЕМА 7.2. КОРТЕЖІ

 

 

 

 

Уроки Python з нуля / #9 – Кортежі (tuple) в Python

 

Презентація. Кортежі в PYTHON №7.2

 

 

З кортежами (tuple) пов’язують незмінну структуру даних, подібну до списків, але яка не може бути змінена після створення. Іноді їх порівнюють з «незмінними списками». Як і списки, кортежі можуть містити елементи різних типів та записуються у формі набору елементів, що розділені комами і укладені у круглі дужки: (1, 3, 5, ‘Hello’).

Кортежі використовуються замість списків у деяких ситуаціях. По-перше, для захисту даних від випадкових змін. Якщо потрібно працювати з набором даних, не змінюючи його, кортеж може бути корисним.

Також кортежі, зазвичай, займають менше пам’яті порівняно зі списками, що стає ще однією причиною їх використання.

>>> lst=[1, 2, 3]

>>> tpl=(1, 2, 3)

>>> print (lst. sizeof ())

32

>>> print (tpl. sizeof ())

24

Третя причина полягає у поліпшенні продуктивності, оскільки кортежі працюють швидше ніж списки, зокрема під час операцій перебору елементів. Четверта причина можливість використання кортежів як ключів у словниках.

>>> d = {(1, 1, 1) : 1}

>>> d = {[1, 1, 1] : 1}

Traceback (most recent call last):

  File «<pyshell#3>«, line 1, in <module>

  d = {[1, 1, 1] : 1}

TypeError: unhashable type: ‘list’

 

7.2.1 Задання кортежів

 

Для задання порожнього кортежу можна скористатися однією з команд:

>>> a=()

>>> b=tuple()

 

Задання кортежу з наперед заданим набором елементів:

>>> a=(1, 3, 5, ‘Hello’)

 

Окрім того, будь-який набір різних об’єктів, розділених комами та не виділених будь-якими дужками (тобто ні квадратними, ні фігурними, ні круглими) стандартно вважатиметься кортежем:

>>> b=1, 3, 5, ‘Hello’

>>> print(b)

(1, 3, 5, ‘Hello’)

 

Проте створення кортежу з одного елементу має певні особливості. Зокрема, ввівши команду a = (3) , отримаємо в змінній a лише число, а не кортеж:

>>> a=(3)

>>> print(a)

3

 

Для створення кортежу з одного елементу можна записати:

>>> a=(3,)

>>> print(a)

(3,)

 

Отримання доступу до елементу кортежу або отримання зрізу для кортежу означає, що ми можемо «прочитати» відповідні значення, але змінити їх не можемо.

 

Створення кортежів з інших структур даних

 

Кортеж можна отримати з елементів об’єкта, що може ітеруватися (діапазон, рядок, словник, множина, кортеж, файл тощо), використавши функцію tuple([iterable]):

>> b=tuple(range(1,10,2))

>>> print(b)

(1, 3, 5, 7, 9)

>>> b=tuple(‘Hello’)

>>> print(b)

(‘H’, ‘e’, ‘l’, ‘l’, ‘o’)

 

Об’єднання кортежів

 

Нові кортежі можуть бути створені методом конкатенації (об’єднання) декількох кортежів. Для цього використовується перевизначена операція додавання («+») як операція конкатенації кортежів.

>>> b=(1, 3, 5, 7, 9)

>>> b=b + (10,)

>>> print(b)

(1, 3, 5, 7, 9, 10)

 

Багаторазове повторення елементів

 

Аналогічно до перевизначеної операції («+») для кортежів в мові Python перевизначена і операція множення «*». Якщо виконати операцію «*» кортежу b на ціле число n, то як результат буде отриманий кортеж, що складається з n повторень кортежу b:

>>> b=(0,)*5

>>> print(b)

(0, 0, 0, 0, 0)

 

 

Доступ до окремих елементів кортежу здійснюється аналогічно доступу до елементів списку, використовуючи їхні індекси. Щоб отримати доступ до конкретного елементу кортежу, потрібно вказати ім’я змінної кортежу та використати квадратні дужки з індексом необхідного елементу (ім’я_кортежу[індекс]).

>>> a=(1, 3, 5, 7)

>>> print(a[0])

1

 

Те саме стосується і зрізів кортежів. Задати зріз можна одним з двох варіантів:

tuple[start: stop].

tuple[start: stop: step].

>>> print(a[1:3])

(3, 5)

 

Можна перевірити приналежність деякого елементу до кортежу, використовуючи оператор in (значення in ім’я_кортежу).

>>> a=(1, 3, 5, 7)

>>> 3 in a

True

>>> 3 in a

False

Але, як вже було сказано, змінювати елементи кортежу не можна. За спроби змінити чи вилучити елемент кортежу виникне виняток TypeError.

>>> b=(1, 2, 3)

>>> b[1]=15

Traceback (most recent call last):

    File «<pyshell#1>«, line 1, in <module>

    b[1]=15

TypeError: ‘tuple’ object does not support item assignment

>>> del b[1]

Traceback (most recent call last):

   File «<pyshell#49>«, line 1, in <module>

   del b[1]

TypeError: ‘tuple’ object doesn’t support item deletion

 

Вилучення кортежів

 

Як було зазначено, вилучити окремий елемент з кортежу неможливо, але можна видалити кортеж повністю, скориставшись командою del (del ім’я_кортежу).

>>> a=(1, 3, 5, 7)

>>> del a

>>> print(a)

Traceback (most recent call last):

   File «<pyshell#27>«, line 1, in <module>

   print(a)

NameError: name ‘a’ is not defined

 

Перетворення кортежів у список і назад

 

На основі існуючого кортежу можна створити список, як і навпаки зі списку можна створити кортеж. Тобто, використовуючи кортеж для захисту даних, за необхідності можна перетворити його в список, внести необхідні зміни і знову повернути в кортеж.

>>> b=(1,2,3)

>>> b=list(b)

>>> b[1]=5

>>> b=tuple(b)

>>> print(b)

(1, 5, 3)

 

Методи кортежів

 

З урахуванням незмінюваності кортежів вони мають лише методи:

tuple.index(x[, start[, end]]) та tuple.count(x) призначення яких аналогічне призначенням однойменних методів списків.

 

Завдання для самоперевірки

Завдання 1. Для завдання розробити алгоритм та написати відповідну програму з виведенням результатів на екран.

Вимоги до програми:

v вхідні дані ввести за допомогою стандартних процедур введення;

v на друк вивести значення вхідної інформації та результати обчислень;

v вхідні дані взяти довільними, в межах допустимих, якщо вони явно не задані в умові задачі.

1. Написати програму, яка обчислює суму діагональних елементів квадратної матриці.

2. Написати програму, яка обчислює кількість додатних, від’ємних, нульових елементів двовимірного масиву. Елементи масиву задано функцією a[i,j]= I2+sin(j+p).

3. У двовимірному масиві знайти середнє арифметичне додатних елементів кожного стовпця.

4. У двовимірному масиві знайти кількість від’ємних елементів кожного рядка.

 

Завдання 2. Для завдання розробити алгоритм та написати відповідну програму з виведенням результатів на екран.

1. Впорядкувати елементи масиву за зростанням.

2. Впорядкувати елементи масиву за спаданням.

3. Впорядкувати елементи масиву таким чином, щоб спочатку були розміщені всі додатні елементи, а потім всі від’ємні (0 вважаємо додатнім елементом).

4. Стиснути масив, вилучивши з нього всі елементи, модуль яких не перевищує 1, місце, яке звільнилось в кінці масиву, заповнити нулями.

 

 

Ø Для створення кортежу використовують функцію tuple() або в круглих дужках через кому перераховують елементи кортежу.

Ø Доступ до елементів кортежу отримують за індексом. Індексація елементів кортежу починається з нуля. Індекс указують у квадратних дужках після імені кортежу. Зріз для кортежу отримують так само, як і зріз для списку.

Ø Визначити кількість елементів у кортежі можна за допомогою функції len(). Індекс елементу в кортежі визначається методом index(), а кількість елементів із заданим значенням можна визначити за допомогою методу count().

 

Питання для перевірки засвоєних знань

1. Що таке кортеж у Python?

2. Які особливості кортежів порівняно зі списками?

3. Як створюють порожній кортеж?

4. Які дозволені типи даних для елементів кортежу?

5. Які є оператори для створення кортежів?

6. Що таке одноелементний кортеж?

7. Що таке незмінність кортежів порівняно зі списками?

8. Який вплив ітерабельності кортежу на його використання?

9. Що таке вкладення кортежів?

10. Як використовують кортеж для обробки списків чи рядків?

11. Що таке функція range() у Python?

12. Назвіть параметри функції range()?

13. Як відбувається створення діапазону чисел?

14.  Як використовують від’ємні значення у range()?

15. Як відбувається виведення чисел у зворотному порядку з range()?

16. Як використовують дробові числа у range()?

17. Як використовують range() у циклі for?

18. Як відбувається зміна діапазону після його створення у range()?

19. Як відбувається виведення парних/непарних чисел з range()?

20. Як використовують range() для створення списку чисел

Попередня тема

На початок

Наступна тема