32

Как проверить, пустой ли список?

11

Проблема: Как проверить, пустой ли список в Python?

У меня есть список в Python, который я определил следующим образом:

a = []

Теперь я хочу выяснить, пустой ли этот список. Как правильно это сделать?

Какие есть подходы и какие из них лучше использовать с точки зрения производительности и читабельности кода?

5 ответ(ов)

11

Я предпочитаю явный вариант:

if len(li) == 0:
    print('список пуст')

Таким образом, абсолютно ясно, что li является последовательностью (списком) и мы хотим проверить его размер. Моя проблема с if not li: ... заключается в том, что это создает ложное впечатление, что li — это булевая переменная.

1

Зачем проверять вообще?

Перед тем как проверять, пустой ли список, стоит задуматься, действительно ли это необходимо. В идиоматичном подходе Python часто избегают явных проверок в пользу того, чтобы позволить языку естественным образом обрабатывать такие случаи.

Например:

a = []

for item in a:
    # <Делать что-то с item>

# <Остальная часть кода>

Если a пуст, то тело цикла просто не выполнится, и программа продолжит работать без сбоев. Этот подход обычно является самым простым и "питоничным" способом работы со списками, независимо от их содержимого.

Тем не менее, если вам ТЯСНО нужно проверить пустой ли список (например, чтобы обработать его иначе):

a = []

if not a:
    # <Реагировать на пустой список>

# <Остальная часть кода>

это вполне достаточно, как уже предложили другие.

0

Я написал следующий код:

if isinstance(a, (list, some, other, types, i, accept)) and not a:
    do_stuff

но он был оценен на -1. Я не уверен, связано ли это с тем, что читатели не согласны с такой логикой, или же они посчитали, что ответ не был представлен в удачной форме. Будем считать, что это второе, так как, как бы мы ни определяли "питоничность", данная стратегия верная. Если вы еще не исключили случаи, когда a может быть, например, False, вам нужен более строгий тест, чем просто if not a:. Можно использовать что-то вроде этого:

if isinstance(a, numpy.ndarray) and not a.size:
    do_stuff
elif isinstance(a, collections.Sized) and not a:
    do_stuff

Первый тест является ответом на комментарий @Mike, приведенный выше. Третью строку также можно заменить на:

elif isinstance(a, (list, tuple)) and not a:

если вы хотите принимать только экземпляры определенных типов (и их подтипов) или на:

elif isinstance(a, (list, tuple)) and not len(a):

Вы можете обойтись без явной проверки типа, но только если окружающий контекст уже гарантирует, что a — это значение тех типов, которые вы готовы обрабатывать, или если вы уверены, что типы, которые вы не готовы обрабатывать, вызовут ошибки (например, TypeError, если вы вызовете len для значения, для которого это неопределено) — и вы готовы справляться с этими ошибками. В общем, "питоничные" соглашения склоняются к последнему подходу. Обрабатывайте объект как утку и позволяйте ему вызывать DuckError, если он не знает, как квака́ть. Тем не менее, вам все равно нужно подумать о типах, которые вы предполагаете, и убедиться, что случаи, с которыми вы не готовы справляться, действительно вызовут ошибки в нужных местах. Массивы Numpy — хороший пример ситуации, когда просто слепо полагаться на len или булевое приведение может не дать того результата, которого вы ожидаете.

0

Вот несколько способов проверить, пустой ли список:

a = []  # это список

1) Простой и питоничный способ:

if not a:
    print("a пустой")

В Python пустые контейнеры, такие как списки, кортежи, множества, словари и переменные, рассматриваются как False. Вы можете просто считать список предикатом (возвращающим булево значение), где значение True будет означать, что он непустой.

2) Более явный способ: используя len(), чтобы узнать длину и проверить, равна ли она 0:

if len(a) == 0:
    print("a пустой")

3) Или сравнив его с анонимным пустым списком:

if a == []:
    print("a пустой")

4) Еще один, пусть и глупый способ, заключается в использовании исключения и функции iter():

try:
    next(iter(a))
    # список имеет элементы
except StopIteration:
    print("Ошибка: a пустой")

Выберите любой из приведенных методов в зависимости от ваших предпочтений и стиля кода!

0

Вы можете проверить, является ли список пустым, используя следующее выражение в Python:

if a == []:
    print("Список пустой.")

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

if not a:
    print("Список пустой.")

Это более "питонично" и считается хорошей практикой.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь