Есть ли нумерация элементов в множествах (наборах) и как обратиться к определенному элементу множества?
Заметил, что при выводе элементов из множества они каждый раз выводятся с разной нумерацией порядка, как тогда можно обратится к определенному элементу множества?
p.s. Может кому-нибудь будет полезно: Заметил, что в 3.x.x версии, если во множестве только переменные типа int, то их всегда выводит упорядоченно от наименьшего до наибольшего.
Ответы (4 шт):
>>> s = {1, 2, 3}
>>> print (s)
{1, 2, 3}
>>> print (s[0])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'set' object is not subscriptable
>>>
Если нужен упорядоченный список, то нужно брать tuple или list.
Если совсем коротко, то на прямую, никак.
Выход: создать из множества список.
a = set('this is my set') # {'i', 'm', 'e', 'h', 't', 'y', 's', ' '}
a[0] # TypeError: 'set' object is not subscriptable
b = list(a) # ['i', 'm', 'e', 'h', 't', 'y', 's', ' ']
b[0] # i
Для упорядоченного множества есть специальный модуль:
from ordered_set import OrderedSet
print(set('abracadabra'))
print(set([5, 5, 4, 6, 7]))
print(OrderedSet('abracadabra'))
print(OrderedSet([5, 5, 4, 6, 7]))
Вывод:
{'b', 'c', 'r', 'a', 'd'}
{4, 5, 6, 7}
OrderedSet(['a', 'b', 'r', 'c', 'd'])
OrderedSet([5, 4, 6, 7])
Множество как математический термин по определению неупорядоченно, например:
{1, 2} == {2, 1}
Питон строго придерживается этой концепции, значит, невозможно полагаться на какой-либо специальный порядок, хотя вы какой-то для чисел отследили — это только внутреннее дело имплементации, которое может измениться с другой версией Питона без предупреждения.
Значит, когда вы хотите прямой доступ к элементу (например для его позиции в структуре), нужно использовать другие структуры, например список, упорядоченное множество (ordered_set) или словарь, как вам уже посоветовали в других ответах.