Получение только элемента из одноэлементного списка в Python?
Когда известно, что список Python всегда содержит один элемент, есть ли способ доступа к нему, кроме:
mylist[0]
Вы можете спросить: "Зачем вам это нужно?". Любопытство. Кажется, есть альтернативный способ сделать все в Python.
Ответ 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)