Доступ к единственному элементу набора

У меня есть set в Python, из которого я удаляю элементы один за другим на основе условия. Когда набор остается только с одним элементом, мне нужно вернуть этот элемент. Как получить доступ к этому элементу из набора?

Упрощенный пример:

S = set(range(5))
for i in range(4):
    S = S - {i}
# now S has only 1 element: 4
return ? # how should I access this element
# a lame way is the following
# for e in S:
#    return S

Ответ 1

Используйте set.pop:

>>> {1}.pop()
1
>>>

В вашем случае это будет:

return S.pop()

Обратите внимание, что это приведет к удалению элемента из набора. Если это нежелательно, вы можете использовать min | max:

return min(S) # 'max' would also work here

Демо:

>>> S = {1}
>>> min(S)
1
>>> S
set([1])
>>> max(S)
1
>>> S
set([1])
>>> 

Ответ 2

Я бы использовал:

e = next(iter(S))

Это неразрушающий и работает, даже если в наборе имеется более одного элемента. Еще лучше, у него есть возможность указать значение по умолчанию e = next(iter(S), default).

Вы также можете использовать распаковку:

[e] = S

Метод распаковки, вероятно, будет самым быстрым способом, и он включает проверку ошибок, чтобы убедиться, что в наборе имеется только один элемент. Недостатком является то, что это выглядит странно.

Ответ 3

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

В случае вашего примера:

return list(S)[0]

Ответ 4

Вы можете назначить последний элемент переменной, используя star operation.

>>> a={"fatih"}
>>> b=str(*a)
>>> b
'fatih'

Теперь переменная b имеет string object.

Если единственным элементом является число, вы можете использовать int():

>>> a={1}
>>> c=int(*a)
>>> c
1