Подтвердить что ты не робот

Получение только элемента из одноэлементного списка в Python?

Когда известно, что список Python всегда содержит один элемент, есть ли способ доступа к нему, кроме:

mylist[0]

Вы можете спросить: "Зачем вам это нужно?". Любопытство. Кажется, есть альтернативный способ сделать все в Python.

4b9b3361

Ответ 1

Последовательность распаковки:

singleitem, = mylist
# Identical in behavior (byte code produced is the same),
# but arguably more readable since a lone trailing comma could be missed:
[singleitem] = mylist

Явное использование протокола итератора:

singleitem = next(iter(mylist))

Деструктивный поп:

singleitem = mylist.pop()

Отрицательный индекс:

singleitem = mylist[-1]

Установить через одиночную итерацию for (поскольку переменная цикла остается доступной с ее последним значением при завершении цикла):

for singleitem in mylist: break

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

Ответ 2

Я добавлю, что more_itertools  библиотека имеет инструмент, который возвращает один элемент из итерабельного.

from more_itertools import one


iterable = ["foo"]
one(iterable)
# "foo"

Кроме того, more_itertools.one вызывает ошибку, если итерабельность пуста или имеет более одного элемента.

iterable = []
one(iterable)
# ValueError: not enough values to unpack (expected 1, got 0)

iterable = ["foo", "bar"]
one(iterable)
# ValueError: too many values to unpack (expected 1)