Кортежи и множества в Python: шпаргалка

Неизменяемые кортежи и множества: распаковка, дубликаты, операции над наборами.

Кортеж и распаковка

point = (10, 20)
x, y = point                    # x=10, y=20
lat, lon = 55.7, 37.6           # tuple without parens
first, *rest = [1, 2, 3, 4]     # 1, [2, 3, 4]

Кортеж — неизменяемый список; распаковка раскладывает его по переменным за один шаг. Звёздочка собирает «всё остальное» в список.

set: уникальные значения

emails = ['a@m.ru', 'b@m.ru', 'a@m.ru']
unique = set(emails)          # {'a@m.ru', 'b@m.ru'}
len(unique)                   # 2
deduped = list(set(emails))   # back to a list

set хранит каждое значение один раз — set(список) мгновенно убирает дубли. Подвох: множество не помнит порядок; нужен порядок — бери dict.fromkeys(items).

Операции множеств: | & -

py_devs = {'anna', 'oleg', 'ivan'}
js_devs = {'oleg', 'maria'}
py_devs & js_devs   # {'oleg'}, both
py_devs | js_devs   # everyone
py_devs - js_devs   # {'anna', 'ivan'}, python only

& — пересечение, | — объединение, минус — разница. Это в разы быстрее и короче, чем сверять два списка вложенными циклами.

Что выбрать: список, кортеж, множество, словарь

cart = ['tea', 'tea']    # list: order + duplicates
point = (55.7, 37.6)     # tuple: fixed pair
tags = {'sale', 'new'}   # set: unique, fast lookup
stock = {'tea': 5}       # dict: value by key

Порядок и повторы — список; «замороженная» запись — кортеж; уникальность и быстрый in — множество; поиск по ключу — словарь. Ошибся — конвертация в один вызов: list(), set(), tuple().

Что дальше