Этот пост содержит ссылки на большую обозначение 1 , если вы не знакомы с ним (или не помните, как это работает) Теперь самое время для повышения квалификации.
В стандартной библиотеке Python существует тонна данных структур данных, большинство из которых идут недостаточно. Сегодня я хотел бы сосредоточиться на одном типе, в частности, вы, вероятно, должны использовать больше, чем вы: Установить
Отказ Вы можете быть уже осведомлены о общей концепции множеств в информатике 2 набор Python 3 это именно это.
Что это?
Для тех из вас, кто уже не знает, а Установить
является неупорядоченной коллекцией одновременных объектов, которые не могут содержать никаких дубликатов. Hashable Cart является ключом здесь, очень похоже на клавиши в Дикт
4 (A.k.a. Ассоциативный массив 5 ), каждая запись хешируется, чтобы создать индекс в основной структуре данных. Вы можете думать о Установить
очень похоже на Дикт
без каких-либо ценностей.
Когда это использовать?
А Установить
чрезвычайно полезная альтернатива более популярным Список
В нескольких сценариях:
- Ищете членство (например,
в
Оператор). Время поиска дляУстановить
это O (1), тогда как для списка это O (n) 6 . - Если вы будете Удаление Члены, та же история как
в
Здесь относится к сложности. - Если вам нужно сравнить, контрастные или комбинировать коллекции –
Установить
Имеет операторы для всех этого. - Если вы не можете иметь никаких дубликатовных значений в коллекции.
Когда не использовать это?
- Если вам нужно иметь более одной копии того же значения в коллекции.
- Если порядок объектов имеет значение
- Если объекты в вашей коллекции не являются одновременно Hashable 7.
Как это использовать?
set_with_values = {'a', 'b', 'c'} other_set = set() # Note {} would be a dict assert 'a' in set_with_values # Super speedy operation other_set.add('c') assert other_set < set_with_values # This means other_set is a subset of set_with_values assert set_with_values > other_set # Super set other_set.add('d') # Set defines a bunch of useful operators assert set_with_values | other_set == {'a', 'b', 'c', 'd'} assert set_with_values & other_set == {'c'} assert set_with_values - other_set == {'a', 'b'} assert set_with_values ^ other_set == {'a', 'b', 'd'} set_with_values |= other_set # You can perform updates with all of those operators assert set_with_values == {'a', 'b', 'c', 'd'} # Note only 1 copy of 'c' set_with_values.remove('d') # Again, super fast compared to lists
Заключение
Если вы еще не используете наборы по всему коду, вы, вероятно, должны быть. В основном в любое время, когда вы используете в
со списком или дель
С списком вы должны рассмотреть возможность использования другой структуры.
https://docs.cython.org/3.7/library/stdtypes.html#set-types-set-frozenset ↩
https://docs.cython.org/3.7/library/stdtypes.html#mapping-types-dict ↩
https://www.ics.uci.edu/~pattis/ics-33/lectures/CompLexityPython.txt ↩
Оригинал: “https://dev.to/dbanty/you-should-use-python-sets-1d14”