Є три варіанти імпорту бібліотек: імпорт повністю всієї бібліотеки, імпорт переліку функцій з неї або імпорт функції з псевдонімом:
import sys #
from sys import argv #
from sys import argv as cli_param #
Кортежі (англ. tuple) використовується уявлення незмінної послідовності різнорідних об'єктів. Вони зазвичай записуються в круглих дужках, але якщо неоднозначності немає, то дужки можна опустити.
# New tuple made of different types
>>> t = (2, 2.05, "Hello")
>>> t
(2, 2.05, 'Hello')
# Assigning three different variables using tuple, multiple assignment
>>> (a, b, c) = t
>>> print(a, b, c)
2 2.05 Hello
>>> z, y, x = t
>>> print(z, y, x)
2 2.05 Hello
# Creating one element tuple
>>> x = 12,
>>> x
(12,)
# Creating tuple w/o brackets
>>> tup = 1, 2, 'qwerty'
>>> tup
(1, 2, 'qwerty')
До кортежів застосовуються багато функцій з тих, що застосовуються до списків: отримання довжини кортежу, конкатенація (склеювання) кортежу, зрізи, методи index і count:
>>> t = 1, 2, 3
>>> t = t + (4, 5)
>>> t
(1, 2, 3, 4, 5)
>>> t[:-1]
(1, 2, 3, 4)
>>> t[2:-1]
(3, 4)
>>> len(t)
5
>>> t.index(2)
1
>>> t.count(3)
1
Як видно з прикладу, кортеж може бути використаний і в лівій частині оператора присвоєння. Значення кортежу в лівій частині оператора привласнення зв'язуються з аналогічними елементами правої частини. Цей факт дає нам такі чудові можливості як масова ініціалізація змінних і повернення безлічі значень з функції одночасно.
Найчастіше кортежі використовують для того, щоб одержати дані з функції, зберігати дані тощо. Особливості роботи з ними:
- робота з ними швидше (порівняно зі списками);
- займають у пам'яті менше місця;
- можуть виступати як ключі для словника;
- не мають окремих методів;
- використовуються для масової ініціалізації змінних та повернення відразу кількох значень з функції.
Сети - від математичної 'множини' - невідсортована колекція унікальних елементів. У цьому визначенні згадані дві основні особливості сетів – унікальність та відсутність сортування.
Унікальність - сет містить лише унікальні елементи, якщо додавати до нього дублікати - вони не додаються, якщо перевести аркуш у сет - елементи, що повторюються, будуть видалені.
Відсутність сортування - елементи в сеті знаходяться в певному хаотичному порядку.
Множини підтримують перебір всіх елементів (ітерацію), додавання та видалення елементів, але через відсутність сортування не підтримують індексацію та зрізи. Створення множин:
>>> a = {1, 2, 3, 4, 5, 4, 3, 4, 5, 6, 5, 4, 3}
>>> a
{1, 2, 3, 4, 5, 6}
>>> b = {1, 2, 3, 'a', 'c', 0.34}
>>> b
{0.34, 1, 2, 3, 'a', 'c'}
Множини підтримують деякі операції:
>>> set1 = {1, 2, 3, 4, 5, 6}
>>> set2 = {5, 6, 7, 8, 9}
>>> set1 - set2 # Sets difference
{1, 2, 3, 4}
>>> set1 | set2 # Sets union
{1, 2, 3, 4, 5, 6, 7, 8, 9}
>>> set1 & set2 # Sets cross
{5, 6}
Додати елемент до множини можна за допомогою функції add, а видалити з множини елемент - за допомогою функції remove. Як параметр виступає сам елемент, оскільки індексів у множині немає.
>>> set1.add(7)
>>> set1
{1, 2, 3, 4, 5, 6, 7}
>>> set1.remove(1)
>>> set1
{2, 3, 4, 5, 6, 7, 8}
Сети можна використовувати для фільтрації дублів у колекціях. Для цього колекцію потрібно конвертувати в сет, а потім назад:
>>> L = [1, 2, 3, 4, 3, 2, 5, 6, 7, 5, 3, 2]
>>> L
[1, 2, 3, 4, 3, 2, 5, 6, 7, 5, 3, 2]
>>> L = list(set(L))
>>> L
[1, 2, 3, 4, 5, 6, 7]
Сети можна використовувати для роботи з великими наборами даних: припустимо, у нас є бази даних програмістів та менеджерів:
>>> programmers = {'ivanov','petrov','sidorov'}
>>> managers = {'ivanov','moxov','goroxov'}
>>> programmers & managers
{'ivanov'}
>>> programmers | managers
{'ivanov', 'petrov', 'sidorov', 'goroxov', 'moxov'}
>>> programmers - managers
{'petrov', 'sidorov'}
Словник (хеш, асоціативний масив) – мінлива та невпорядкована структура даних, призначена для зберігання елементів виду ключ: значення.
Значенням елемента словника може бути будь-який тип даних, ключем елемента - будь-який незмінний (immutable) тип даних, тобто str, int, float, tuple та ін.
Є кілька способів створити словник: пряме створення, створення за допомогою перетворення на тип (використовуючи функцію dict), використовуючи функцію fromkeys та через генератор словників :)
Розглянемо всі ці методи з прикладу:
>>> d = {}
>>> d
{}
>>> d1 = {'a':1, 'b': 2}
>>> d1
{'a': 1, 'b': 2}
>>> d = dict(short='dict', long='dictionary')
>>> d
{'short': 'dict', 'long': 'dictionary'}
>>> d = dict([(1, 1), (2, 4)])
>>> d
{1: 1, 2: 4}
d = dict.fromkeys(['a', 'b', 1, (1, 2)])
>>> d
{'a': None, 1: None, 'b': None, (1, 2): None}
>>> d = dict.fromkeys(['a', 'b', 1, (1, 2)], 4)
>>> d
{'a': 4, 1: 4, 'b': 4, (1, 2): 4}
>>> d = {a: a ** 2 for a in range(7)}
>>> d
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36}
Функція dict має одну особливість, з її допомогою можна швидко створювати словники з ключами-рядками, опускаючи лапки. Це показано на прикладі нижче. На жаль, працює тільки з явними рядками, принцип формування яких такий самий, як і принцип найменування змінних:
>>> dict(a=1, b=2, c=3, d=13)
{'a': 1, 'c': 3, 'b': 2, 'd': 13}
>>> dict(a=1, b=2, c=3, d=13, 1=2)
File "<stdin>", line 1
SyntaxError: keyword can't be an expression
>>> dict(a=1, b=2, c=3, d=13, '1'=2)
File "<stdin>", line 1
SyntaxError: keyword can't be an expression
Зі словниками доступні операції взяття елемента, видалення елемента, додавання елемента та його оновлення:
>>> d = dict(a=1, b=2, c=3, d=13)
>>> d
{'a': 1, 'c': 3, 'b': 2, 'd': 13}
>>> d['a']
1
>>> d[1] = 15
>>> d
{'a': 1, 1: 15, 'c': 3, 'b': 2, 'd': 13}
>>> del d[1]
>>> d
{'a': 1, 'c': 3, 'b': 2, 'd': 13}
>>> d['a'] = 111
>>> d['a']
111
Взяття елемента зі словника по ключу краще здійснювати не через квадратні дужки, а за допомогою методу .get(). Якщо елемент відсутній, звичайне взяття по ключу видасть помилку, а метод .get() дозволяє цього уникнути:
>>> d['a']
1
>>> d['e']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'e'
>>> d.get('e')
>>>
>>> d.get('e', 'No such element')
'No such element'
>>>
>>> d
{'a': 1, 'c': 3, 'b': 2, 'd': 13}
>>> d.update({'4': 4, '5': 5})
>>> d
{'a': 1, 'c': 3, 'b': 2, '5': 5, 'd': 13, '4': 4}
>>> len(d)
6
>>> d.keys()
['a', 'c', 'b', '5', 'd', '4']
>>> d.values()
[1, 3, 2, 5, 13, 4]
>>> d.items()
dict_items([('a', 1), ('c', 3), ('b', 2), ('d', 13), ('4', 4), ('5', 5)])
Словники можна чудово проходити у циклі:
for key in d.keys():
print(key, d[key])
for key, val in d.items():
print(key, val)
І насамкінець - маленький кумедний приклад використання словника. Нагадую, що значенням може бути будь-що:
>>> calculator = {
'plus': lambda x, y: x + y,
'minus': lambda x, y: x - y,
'mul': lambda x, y: x*y,
'div': lambda x, y: x/y,
'mod': lambda x, y: x%y
}
calculator['minus'](9,3)
6
- Створити словник оцінок передбачуваних студентів (Ключ – ПІ студента, значення – список оцінок студентів). Знайти найуспішнішого і самого слабенького за середнім балом.
- Створити структуру даних для студентів з імен та прізвищ, можна випадкових. Придумати структуру даних, щоб вказувати, у якій групі навчається студент (Групи Python, FrontEnd, FullStack, Java). Студент може навчатися у кількох групах. Потім вивести:
- студентів, які навчаються у двох та більше групах
- студентів, які не навчаються на фронтенді
- студентів, які вивчають Python або Java
- Написати функцію переведення розмірів жіночої білизни з міжнародної у решту. Всередині функції потрібно просто звертатися до правильно складеного словника.