Кортежи и множества в 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().