Как проверить, является ли deque пустым

#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:

Есть два основных способа:

  1. Контейнеры могут использоваться как логические значения (с False указанием, что контейнер пуст):

  2. У контейнеров в 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)