Список против набора в Python

Наборы и списки используются в Python для хранения и обработки данных в программе. В этой статье обсуждается список и набор в Python, чтобы сравнить их производительность, синтаксис, изменчивость и повторение.
Список Python против набора сводной таблицы
Следующая таблица содержит сводку различий между списком Python и набором.
Список | Набор |
Список может содержать повторяющиеся элементы. | Набор содержит уникальные элементы. |
Мы можем получить доступ к элементу из списка, используя индексную запись. | Мы не можем получить доступ к элементам в наборе, используя нотацию нижнего индекса. |
Список может содержать различные типы данных и другие объекты-контейнеры, такие как список, кортеж, набор или словарь. | Набор может содержать только неизменяемые объекты, такие как целые числа, строки, кортежи и числа с плавающей запятой. |
Мы можем создавать вложенные списки в Python. | Мы не можем создавать вложенные наборы в Python. |
Списки обеспечивают произвольный доступ к элементам. | Наборы не допускают произвольного доступа к элементам. |
Список Python содержит элементы в упорядоченной последовательности. | Наборы содержат элементы в неупорядоченном порядке. |
Теперь давайте подробно обсудим все различия с примерами кода.

Что такое список Python?
Список Python — это структура данных, в которой элементы хранятся в последовательном порядке. Мы можем определить список в Python, используя квадратные скобки, как показано ниже.
myList=[1,2,3,4,5,6]
print("The list is:")
print(myList)
Выход:
The list is:
[1, 2, 3, 4, 5, 6]
Мы также можем преобразовать другой объект-контейнер, например кортеж, в список, используя метод list()
функция. list()
Функция принимает другой элемент в качестве входного аргумента и возвращает новый список, содержащий все элементы объекта входного контейнера. Вы можете наблюдать это на следующем примере.
myList=list((1,2,3,4,5,6))
print("The list is:")
print(myList)
Выход:
The list is:
[1, 2, 3, 4, 5, 6]
Список может содержать объекты разных типов данных и другие объекты-контейнеры, такие как списки, кортежи, наборы и т. д., как показано ниже.
myList=[1,"PFB",(1,2,3),101.1117,5,6]
print("The list is:")
print(myList)
Выход:
The list is:
[1, 'PFB', (1, 2, 3), 101.1117, 5, 6]
Вы можете заметить, что список в приведенном выше списке содержит целое число, строку, кортеж и число с плавающей запятой.
Все элементы в списке расположены в определенном порядке, и мы можем получить к ним доступ с помощью оператора индексации Python. Первый элемент в списке имеет индекс 0, второй элемент имеет индекс 1 и так далее. Вы можете наблюдать это на следующем примере.
myList=[1,"PFB",(1,2,3),101.1117,5,6]
print("The list is:")
print(myList)
print("The element at index 3 is:")
print(myList[3])
Выход:
The list is:
[1, 'PFB', (1, 2, 3), 101.1117, 5, 6]
The element at index 3 is:
101.1117
Мы также можем использовать отрицательные индексы для доступа к элементам в списке. Отрицательный индекс -1 дает нам последний элемент списка. Индекс -2 дает предпоследний элемент и так далее. Вы можете наблюдать это на следующем примере.
myList=[1,"PFB",(1,2,3),101.1117,5,6]
print("The list is:")
print(myList)
print("The element at index -2 is:")
print(myList[-2])
Выход:
The list is:
[1, 'PFB', (1, 2, 3), 101.1117, 5, 6]
The element at index -2 is:
5
Что такое набор Python?
Набор Python — это структура данных, используемая для хранения уникальных элементов неупорядоченным образом. Мы можем определить набор в Python с помощью фигурных скобок, как показано ниже.
mySet={1,2,3,4,5,6}
print("The set is:")
print(mySet)
Выход:
The set is:
{1, 2, 3, 4, 5, 6}
Мы также можем преобразовать другой объект-контейнер, например список, в набор, используя метод set()
функция. set()
Функция принимает другой объект-контейнер в качестве входного аргумента и возвращает набор. Вы можете наблюдать это на следующем примере.
mySet=set([1,2,3,4,5,6])
print("The set is:")
print(mySet)
Выход:
The set is:
{1, 2, 3, 4, 5, 6}
Элементы в наборе расположены в произвольном порядке. Вы не можете получить к ним доступ, используя индексы. Однако вы можете перебирать элементы в наборе, используя цикл for, как показано ниже.
mySet=set([1,2,3,4,5,6])
print("The set is:")
print(mySet)
print("The elements in the set are:")
for element in mySet:
print(element)
Выход:
The set is:
{1, 2, 3, 4, 5, 6}
The elements in the set are:
1
2
3
4
5
6
Список Python против набора: синтаксис
Есть много различий в синтаксисе списка и набора.
Мы можем получить доступ к элементам списка, используя индексы. Наоборот, если мы попытаемся получить доступ к элементу в наборе с помощью индексов, программа выдаст ошибку. Вы можете наблюдать это на следующем примере.
myList=[1,2,3,4,5,6]
mySet={1,2,3,4,5,6}
print("The list is:")
print(myList)
print("The element is:",myList[2])
print("The set is:")
print(mySet)
print("The element is:",mySet[2])
Выход:
The list is:
[1, 2, 3, 4, 5, 6]
The element is: 3
The set is:
{1, 2, 3, 4, 5, 6}
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/tmp/ipykernel_22443/2698134410.py in <module>
6 print("The set is:")
7 print(mySet)
----> 8 print("The element is:",mySet[2])
TypeError: 'set' object is not subscriptable
В этом примере вы можете заметить, что мы можем получить доступ к элементу в списке, используя нотацию нижнего индекса. Однако программа сталкивается с исключением Python TypeError, когда мы делаем это с набором.
Мы можем создать пустой список, используя квадратные скобки [] без какого-либо элемента. Однако мы не можем создать набор с помощью фигурных скобок {} без элементов. Набор фигурных скобок без какого-либо элемента создает словарь, а не набор. Вы можете наблюдать это на следующем примере.
myList=[]
mySet={}
print("The data type of myList is:")
print(type(myList))
print("The data type of mySet is:")
print(type(mySet))
Выход:
The data type of myList is:
<class 'list'>
The data type of mySet is:
<class 'dict'>
В приведенном выше примере вы можете заметить, что тип данных [] это список, тогда как {} является dict и не установлен. Следовательно, мы не можем создать пустой набор с помощью фигурных скобок.
Мы можем создавать вложенные списки в Python. Однако мы не можем создавать вложенные наборы в Python. Это приведет к ошибке, как показано ниже.
myList=[[1,2,3],[4,5,6],[7,8,9]]
print("The list is:")
print(myList)
mySet={{1,2,3},{4,5,6},{7,8,9}}
print("The set is:")
print(mySet)
Выход:
The list is:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/tmp/ipykernel_22443/2710306261.py in <module>
2 print("The list is:")
3 print(myList)
----> 4 mySet={{1,2,3},{4,5,6},{7,8,9}}
5 print("The set is:")
6 print(mySet)
TypeError: unhashable type: 'set'
Список против набора: повторение
Списки допускают присутствие в них повторяющихся элементов. Однако мы не можем повторять элементы в наборе. Даже если мы передаем несколько экземпляров элемента при создании набора, он будет хранить только один экземпляр одного элемента. Вы можете наблюдать это на следующем примере.
myList=[1,2,2,3,3,3,4,4,4,4,5]
print("The list is:")
print(myList)
mySet={1,2,2,3,3,3,4,4,4,4,5}
print("The set is:")
print(mySet)
Выход:
The list is:
[1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5]
The set is:
{1, 2, 3, 4, 5}
В приведенном выше примере вы можете заметить, что набор содержит только уникальные элементы, даже если мы передаем повторяющиеся элементы при создании набора.
Список против набора: изменчивость
И списки, и наборы изменяемы. Вы можете добавлять и удалять элементы как из набора, так и из списка. Однако вы не можете добавлять в набор изменяемые объекты, такие как списки, наборы, словари и т. д. Наборы могут содержать только неизменяемые элементы.
Python в операторе: список против набора
Мы можем использовать оператор in, чтобы проверить, присутствует ли элемент в наборе, а также в списке. Нет никакой разницы между использованием оператора in со списком или набором.
Список Python против набора: производительность
Создание набора требует дополнительной работы по сравнению с созданием списка. Для каждого элемента, с которым мы хотим инициировать набор, интерпретатор должен проверить, присутствует ли этот элемент уже в наборе или нет. Благодаря этому создание списка имеет лучшую производительность по сравнению с созданием набора. Создание набора занимает в два раза больше времени, чем создание списка с таким же количеством элементов. Вы можете наблюдать это на следующем примере.

При добавлении нового элемента в набор программа сначала проверяет, присутствует ли этот элемент в наборе или нет. Если его нет, то в набор добавляется только элемент. В списке элемент непосредственно добавляется к списку. Из-за накладных расходов на проверку наличия нового элемента набор имеет низкую производительность по сравнению со списком при добавлении нового элемента. Вы можете наблюдать это на следующем примере.

Даже при переборе элементов с использованием цикла for список имеет лучшую производительность, чем набор как показано ниже.

Следовательно, мы можем сказать, что а Список Python имеет лучшую производительность, чем набор, в большинстве операций, если оба объекта имеют одинаковое количество элементов.
Когда использовать список или набор в Python?
Списки допускают дублирование элементов и произвольный доступ. Следовательно, если вы хотите хранить повторяющиеся элементы и получать доступ к элементам случайным образом, используя их положение, вам следует использовать список. Если вам нужно хранить уникальные элементы, вы можете использовать набор.
Заключение
В этой статье мы обсудили список и набор в Python, чтобы сравнить производительность, синтаксис, изменчивость и повторение. Чтобы узнать больше о программировании на Python, вы можете прочитать эту статью о списке и словаре в Python. Вам также может понравиться эта статья о if vs elif vs else в python.
Надеюсь, вам понравилось читать эту статью. Следите за информативными статьями.
Счастливого обучения!
Связанный
Рекомендуемое обучение Python
Курс: Python 3 для начинающих
Более 15 часов видеоконтента с инструкциями для начинающих. Узнайте, как создавать приложения для реального мира, и освойте основы.
Ссылка на источник