#python
#python
Вопрос:
Является ли try-catch единственным методом для этого?
Комментарии:
1. Скорее всего, этот вопрос был бы отклонен и немедленно закрыт, если бы был опубликован сегодня. Интересно, что 10 лет назад люди думали иначе.
Ответ №1:
Если d
это ваше значение deque, используйте
if d:
# not empty
else:
# empty
Это неявно преобразует d
в bool
, что дает результат, True
если deque содержит какие-либо элементы и False
если он пуст.
Комментарии:
1. другие методы включают
d_empty = False if d else True
2.
if d
это канонический способ для всех коллекций (кортежей, строк, списков, dicts и всех их многочисленных подтипов).3. @dfan: В PEP 8 это явно не рекомендуется.
4. @ritmatter Как я уже говорил ранее, официальное руководство по стилю Python явно не поощряет это
if len(d) == 0
, и я лично также предпочитаю более краткоеif d
. Я думаю, что есть преимущество придерживаться официального руководства по стилю, поскольку это делает код Python более согласованным во всех кодовых базах.5.@RTbecard: Это общее для всех коллекций в Python и считается довольно фундаментальной идиомой Python. В документации действительно не указано это явно для каждого отдельного типа данных. Любой тип, который поддерживает,
len()
также поддерживает преобразование вbool
.
Ответ №2:
Есть два основных способа:
-
Контейнеры могут использоваться как логические значения (с
False
указанием, что контейнер пуст): -
У контейнеров в Python также есть
__len__()
метод для указания их размера.
Вот несколько шаблонов:
non_empty = bool(d) # Coerce to a boolean value
empty = not d # Invert the boolean value
if d: # Test the boolean value
print('non-empty')
while d: # Loop until empty
x = d.pop()
process(x)
if len(d) == 0: # Test the size directly
print('empty')
Последний метод не такой быстрый или краткий, как другие, но он обладает тем достоинством, что является явным для читателей, которые могут не знать о логическом значении контейнеров.
Возможны другие способы. Например, индексация с помощью d[0]
вызывает IndexError
для пустой последовательности. Я видел, как это использовалось несколько раз.
Ответ №3:
из коллекций импортируйте deque d = deque() выведите (True), если len(d) == 0, иначе выведите (false)