Набор и список — это структуры данных в Python, которые хранят коллекцию элементов, но разными способами.
Список содержит коллекцию упорядоченных элементов, тогда как набор содержит коллекцию неупорядоченных элементов.
В таблице ниже показана разница между списком и набором:
Список | Набор |
Списки в Python сохраняют порядок элементов при их вставке. | Наборы Python не поддерживают порядок элементов. |
Списки Python являются динамическими и могут быть изменены(элементы можно добавлять, удалять или изменять). | Хотя набор в самом Python является изменяемым(мы можем добавлять или удалять элементы), его элементы должны быть неизменяемого типа(например, числа, строки и кортежи). |
Списки Python могут содержать элементы с одинаковым значением. | Наборы в Python не могут иметь повторяющиеся значения. Если мы попытаемся добавить дубликат, он просто проигнорируется. |
Списки поддерживают индексацию, и доступ к ним можно получить с помощью положительных и отрицательных индексов. | Из-за своей неупорядоченности наборы не поддерживают индексацию. |
Список Python может содержать данные любого типа, включая другие списки. | Наборы Python реализованы с использованием хеш-таблиц, что делает поиск элементов быстрее, чем в списках. |
Список в Python — это упорядоченный набор элементов, определяемый квадратными скобками []. Он может содержать элементы любого типа, например числа, строки и другие объекты, и может быть смешанного типа.
А набор в Python — это неупорядоченная коллекция уникальных элементов. Определяется фигурными скобками {}. Это похоже на математическую концепцию множества: никаких повторяющихся элементов и определенного порядка.
Для преобразования списка в набор в Python существует несколько подходов.
С помощью метода set()
Метод set() в Python — это встроенный метод, позволяющий преобразовать список в набор. Конструктор set() принимает итерируемый объект(например, список) и возвращает его эквивалент набора, автоматически удаляя любые дубликаты.
Например, вы курируете плейлист классических рок-групп США на Python, но мы по ошибке отметили некоторые группы несколько раз. Чтобы удалить эти повторяющиеся бренды, мы можем преобразовать список в набор Python, который удалит из него все повторяющиеся значения.
Список брендов определен ниже.
bands_list = ["Nirvana", "Aerosmith", "Eagles", "Nirvana", "Metallica", "Aerosmith"]
Посмотрите на список. Он содержит повторяющиеся элементы, такие как «Нирвана». Чтобы удалить этот дубликат, передайте список конструктору set(), как показано ниже.
unique_bands = set(bands_list)
Просмотрите файл unique_bands.
print('The set: ', unique_bands)
Из вывода вы можете видеть, что список «bands_list» преобразуется в набор с помощью конструктора set(). В результате также удалил повторяющиеся значения и вернул такой набор: {‘Aerosmith’, ‘Metallica’, ‘Nirvana’, ‘Eagles’}.
Давайте разберемся с этой частью кода: «unique_bands = set(bands_list)». Здесь использование конструктора set() напрямую преобразует список в набор в Python, автоматически удаляя повторяющиеся полосы и гарантируя уникальность каждой полосы.
С помощью цикла For
Этот ручной подход включает перебор списка Python с использованием цикла for и добавление каждого элемента в пустой набор. Это просто и позволяет использовать дополнительную логику или проверки в процессе преобразования.
Например, вы классифицируете памятники США и хотите, чтобы они содержали уникальные элементы в качестве набора.
Список памятников приведен ниже.
monuments_list = ["Statue of Liberty", "Mount Rushmore", "Statue of Liberty", "Lincoln Memorial"]
Вам необходимо преобразовать приведенный выше список в набор, поэтому создайте пустой набор, используя конструктор set(), как показано ниже.
monuments_set = set()
После этого переберите список «monuments_list» и добавьте каждый элемент из списка в пустой набор, как показано ниже в коде.
for monument in monuments_list: monuments_set.add(monument) print('The set:', monuments_set)
Из приведенного выше вывода видно, что пустой набор содержит элемент из списка, но не содержит дублирующего элемента.
Давайте разберемся в части кода. Список Python Monuments_list содержит несколько повторяющихся памятников США. Затем инициализируйте пустой набор памятников Python, используя конструктор set().
Используя эту строку «for памятник в памятниках_list:», пройдите по каждому памятнику в списке.
После этого на каждой итерации этот код: ‘monuments_set.add(monument)’ Если памятник еще не находится в наборе Python(наборы по своей сути не допускают дублирования), он добавляется. Этот простой подход использует цикл для создания уникального набора памятников.
В результате список преобразуется в набор и выглядит так: {‘Гора Рашмор’, ‘Мемориал Линкольна’, ‘Статуя Свободы’}’.
С использованием Set Comprehension
Понимание множеств обеспечивает краткий способ создания наборов в Python, аналогично тому, как понимание списков работает для списков. Это полезно, когда необходимо отфильтровать или применить преобразование к элементам списка Python во время преобразования.
Пример:
cities = ["Los Angeles", "New York", "San Francisco", "Houston", "San Diego"]
Чтобы преобразовать этот список в набор, используя понимание множества, вы можете запустить приведенный ниже код.
set_cities = {city for city in cities} print('The set:', california_cities)
Из приведенного выше вывода вы можете видеть, что список «города» преобразуется в набор с использованием понимания множества.
Эта часть кода «set_cities = {city for city in citys}» использует понимание множества, где в фигурных скобках { } указан цикл for, который берет каждый город из списка «города» и добавляет их в набор.
В результате он создает новый набор из элемента списка, например {‘Лос-Анджелес’, ‘Хьюстон’, ‘Сан-Франциско’, ‘Сан-Диего’, ‘Нью-Йорк’}.