Кортежи и множества в Python
Неизменяемые кортежи и множества: распаковка, дубликаты, операции над наборами.
Кортеж и распаковка
point = (10, 20)
x, y = point # x=10, y=20
lat, lon = 55.7, 37.6 # кортеж без скобок
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)) # обратно в список set хранит каждое значение один раз — set(список) мгновенно убирает дубли. Подвох: множество не помнит порядок; нужен порядок — бери dict.fromkeys(items).
Операции множеств: | & -
py_devs = {'anna', 'oleg', 'ivan'}
js_devs = {'oleg', 'maria'}
py_devs & js_devs # {'oleg'}, в обоих
py_devs | js_devs # все
py_devs - js_devs # {'anna', 'ivan'}, только python & — пересечение, | — объединение, минус — разница. Это в разы быстрее и короче, чем сверять два списка вложенными циклами.
Что выбрать: список, кортеж, множество, словарь
cart = ['tea', 'tea'] # list: порядок и повторы
point = (55.7, 37.6) # tuple: неизменная пара
tags = {'sale', 'new'} # set: без повторов, быстрый поиск
stock = {'tea': 5} # dict: значение по ключу Порядок и повторы — список; «замороженная» запись — кортеж; уникальность и быстрый in — множество; поиск по ключу — словарь. Ошибся — конвертация в один вызов: list(), set(), tuple().