Как проверить, если список пуст?
Например, если передано следующее: a = [] Как проверить, пуст ли?
26 ответов
Использование неявной логики пустого list довольно питонический.
Питонический способ сделать это можно найти в руководстве по стилю PEP 8 (где Да означает «рекомендуется», а Нет означает «не рекомендуется»):
Для последовательностей (строк, списков, кортежей) используйте тот факт, что пустые последовательности являются ложными.
Я предпочитаю это явно:
Таким образом, на 100% ясно, что li — это последовательность (список), и мы хотим проверить ее размер. Моя проблема с if not li: . заключается в том, что он создает ложное впечатление, что li является логической переменной.
Это первая попытка Google для «пустого массива теста python» и аналогичных запросов, плюс другие люди, похоже, обобщают вопрос, не ограничиваясь только списками, поэтому я подумал, что добавлю предостережение для другого типа последовательности, которую многие люди может использовать.
Другие методы не работают для массивов NumPy
Вы должны быть осторожны с массивами NumPy, потому что другие методы, которые хорошо работают для list или других стандартных контейнеров, не работают для массивов NumPy. Я объясняю почему ниже, но вкратце, предпочтительный метод — использовать size .
«Питонический» способ не работает: Часть 1
«Питонический» способ не работает с массивами NumPy, потому что NumPy пытается преобразовать массив в массив bool s, а if x пытается оценить все эти bool одновременно для какого-то типа совокупной истинной ценности. Но в этом нет никакого смысла, поэтому вы получаете ValueError :
«Питонический» способ не работает: Часть 2
Но, по крайней мере, приведенный выше случай говорит вам, что это не удалось. Если у вас есть массив NumPy с ровно одним элементом, оператор if будет «работать» в том смысле, что вы не получите ошибки. Однако, если этот один элемент оказывается 0 (или 0.0 , или False , . ), оператор if неправильно приведет к False :
Но очевидно, что x существует и не пуст! Это не то, что вы хотели.
Использование len может дать неожиданные результаты
Возвращает 1, даже если в массиве ноль элементов.
Нумпифонический путь
Как объясняется в SciPy FAQ, правильный метод во всех случаях, когда вы знаете, что у вас есть массив NumPy, — использовать if x.size :
Если вы не уверены, может ли это быть list , массив NumPy или что-то еще, вы можете объединить этот подход с ответ @dubiousjim, чтобы убедиться, что для каждого типа используется правильный тест. Не очень «питонический», но оказывается, что NumPy намеренно нарушил питоничность хотя бы в этом смысле.
Если вам нужно сделать больше, чем просто проверить, является ли ввод пустым, и вы используете другие функции NumPy, такие как индексирование или математические операции, вероятно, более эффективно (и, безусловно, более часто) заставить input быть массив NumPy. Есть несколько хороших функций для быстрого выполнения этой задачи — самая важная из них — numpy.asarray . Он принимает ваш ввод, ничего не делает, если он уже является массивом, или обертывает ваш ввод в массив, если это список, кортеж и т. Д., И при необходимости преобразует его в выбранный вами dtype . Таким образом, он работает очень быстро, когда это возможно, и гарантирует, что вы просто предполагаете, что ввод — это массив NumPy. Обычно мы даже просто используем то же имя, поскольку преобразование в массив не вернет его за пределы текущего область:
Это заставит проверку x.size работать во всех случаях, которые я вижу на этой странице.
Пустой список сам по себе считается ложным при тестировании истинного значения (см. документацию по Python):
EDIT: еще один аргумент против тестирования пустого списка как False: как насчет полиморфизма? Вы не должны полагаться на то, что список является списком. Он должен просто крякать, как утка — как вы собираетесь заставить ваш duckCollection крякать «False», когда в нем нет элементов?
Ваша duckCollection должна реализовывать __nonzero__ или __len__ , чтобы if a: работал без проблем.
Зачем вообще проверять?
Похоже, никто не ставил под сомнение вашу потребность в проверке списка в первую очередь. Поскольку вы не предоставили никакого дополнительного контекста, я могу представить, что вам, возможно, вообще не нужно выполнять эту проверку, но вы не знакомы с обработкой списков в Python.
Я бы сказал, что самый питонический способ — это вообще не проверять, а просто обрабатывать список. Таким образом, он будет работать правильно, будь то пустой или полный.
Это позволяет обрабатывать любое содержимое a , не требуя специальной проверки на пустоту. Если a пусто, зависимый блок не будет выполняться, и интерпретатор перейдет к следующей строке.
Если вам действительно нужно проверить массив на пустоту, других ответов будет достаточно.
len() — это операция O (1) для списков, строк, словарей и наборов Python. Python внутренне отслеживает количество элементов в этих контейнерах.
За который проголосовали -1. Я не уверен, что это потому, что читатели возражали против стратегии или думали, что ответ бесполезен в том виде, в котором он был представлен. Я сделаю вид, что это второе, поскольку — что бы ни считалось «питоническим» — это правильная стратегия. Если вы уже не исключили или не готовы обрабатывать случаи, когда a равно, например, False , вам нужен более строгий тест, чем просто if not a: . Вы можете использовать что-то вроде этого:
Первый тест проводится в ответ на ответ @Mike выше. Третья строка также может быть заменена на:
Если вы хотите принимать экземпляры только определенных типов (и их подтипов), или с помощью:
Вы можете обойтись без явной проверки типа, но только если окружающий контекст уже уверяет вас, что a является значением типов, которые вы готовы обрабатывать, или если вы уверены, что типы, которые вы не подготовленные к обработке, будут вызывать ошибки (например, TypeError , если вы вызываете len для значения, для которого оно не определено), которые вы готовы обработать. В общем, «питонические» соглашения, кажется, идут этим последним путем. Сожмите его, как утку, и позвольте ему вызвать DuckError, если он не умеет крякать. Тем не менее, вам все еще нужно подумать о том, какие типы предположений вы делаете, и действительно ли случаи, которые вы не готовы правильно обработать, будут ошибаться в нужных местах. Массивы Numpy — хороший пример, когда слепая зависимость от len или логического преобразования типов может не дать именно того, что вы ожидаете.
Из документации по проверке истинности:
Все значения, кроме перечисленных здесь, считаются True
- None
- False
- ноль любого числового типа, например, 0 , 0.0 , 0j .
- любая пустая последовательность, например, » , () , [] .
- любое пустое отображение, например, <> .
- экземпляры пользовательских классов, если класс определяет метод __bool__() или __len__() , когда этот метод возвращает целочисленный ноль или значение bool False .
Как можно видеть, пустой список [] является ложным , поэтому выполнение того, что было бы сделано с логическим значением, звучит наиболее эффективно:
Я предпочитаю следующее:
Вот несколько способов проверить, пуст ли список:
1) Довольно простой питонический способ:
В Python пустые контейнеры , такие как списки, кортежи, наборы, словари, переменные и т. Д., Отображаются как False . Можно просто рассматривать список как предикат ( возвращающий логическое значение ). А значение True указывало бы, что оно не пустое.
2) Очень явный способ: с помощью len() найти длину и проверить, равна ли она 0 :
3) Или сравнивая его с анонимным пустым списком:
4) Еще один, но еще глупый способ — использовать exception и iter() :
Метод 1 (предпочтительный):
Иногда полезно тестировать на None и на пустоту по отдельности, поскольку это два разных состояния. Приведенный выше код дает следующий результат:
Хотя ничего не стоит, что None — фальшивка. Так что, если вы не хотите проводить отдельный тест на None — ность, вам не нужно этого делать.
Было дано много ответов, и многие из них довольно хороши. Я просто хотел добавить, что чек
Также пройдет для None и других типов пустых структур. Если вы действительно хотите проверить пустой список, вы можете сделать это:
Если вы хотите проверить, пуст ли список:
Если вы хотите проверить, все ли значения в списке пусты. Однако для пустого списка это будет True :
Если вы хотите использовать оба случая вместе:
Теперь вы можете использовать:
Вдохновленный решением @dubiousjim, я предлагаю использовать дополнительную общую проверку того, является ли оно чем-то итеративным.
Примечание: строка считается повторяемой. — добавьте and not isinstance(a,(str,unicode)) , если вы хотите исключить пустую строку
Мы могли бы использовать простое if else:
Вы даже можете попробовать использовать bool() вот так. Хотя это, безусловно, менее читабельно, это краткий способ сделать это.
Мне нравится этот способ, потому что контрольный список пуст или нет.
Очень удобно и полезно.
И шертестая версия:
Чтобы проверить, является ли список пустым, вы можете использовать два следующих способа. Но помните, что нам следует избегать явной проверки типа последовательности (это less pythonic способ):
Второй способ — more pythonic . Этот метод является неявным способом проверки и намного предпочтительнее предыдущего.
Надеюсь это поможет.
Просто используйте is_empty () или создайте такую функцию, как: —
Его можно использовать для любой структуры данных, такой как список, кортежи, словарь и многое другое. По ним вы можете вызывать его много раз, используя всего лишь is_empty(any_structure) .
Простой способ — проверить, что длина равна нулю.
Начиная с python3, вы можете использовать
Чтобы проверить, пуст ли список
РЕДАКТИРОВАТЬ: это тоже работает с python2.7 ..
Не знаю, почему так много сложных ответов. Это довольно ясно и просто
Что привело меня сюда, так это особый случай использования: я действительно хотел, чтобы функция сообщала мне, пуст список или нет. Я хотел избежать написания собственной функции или использования здесь лямбда-выражения (потому что казалось, что это должно быть достаточно просто):
И, конечно же, есть очень естественный способ сделать это:
Конечно, не используйте bool в if (т. Е. if bool(L): ), потому что это подразумевается. Но для случаев, когда «не пусто» явно требуется как функция, лучшим выбором будет bool .
Истинное значение пустого списка равно False , тогда как для непустого списка это True .
Ответ Патрика (принят) правильный: if not a: — правильный способ сделать это. Ответ Харли Холкомба правильный, так как он находится в руководстве по стилю PEP 8. Но ни один из ответов не объясняет, почему следовать этой идиоме — хорошая идея, даже если вы лично считаете, что она недостаточно ясна или сбивает с толку пользователей Ruby или кого-то еще.
Код Python и сообщество Python имеют очень сильные идиомы. Следование этим идиомам упрощает чтение вашего кода для любого, кто имеет опыт работы с Python. И когда вы нарушаете эти идиомы, это сильный сигнал.
Это правда, что if not a: не отличает пустые списки от None , или числовые 0, или пустые кортежи, или пустые типы коллекций, созданные пользователем, или пустые типы не совсем коллекции, созданные пользователем, или одноэлементный массив NumPy, действующий как скаляры с ложными значениями и т. д. И иногда важно четко указать на это. И в этом случае вы знаете, о чем конкретно, поэтому можете проверить именно это. Например, if not a and a is not None: означает «все ложное, кроме None», а if len(a) != 0: означает «только пустые последовательности — и все, кроме последовательности, здесь является ошибкой» и так далее. Помимо тестирования именно того, что вы хотите протестировать, это также сигнализирует читателю, что этот тест важен.
Но когда вам не о чем говорить явно, все, кроме if not a: , вводит читателя в заблуждение. Вы сигнализируете о чем-то столь же важном, когда это не так. (Вы также можете сделать код менее гибким, или более медленным, или что-то еще, но это менее важно.) И если вы обычно вводите читателя в заблуждение таким образом, то когда вы делаете нужно проводить различие, это останется незамеченным, потому что вы весь свой код «кричали волком».
Как проверить если список пуст в Python
Привет, ребята, сегодня мы узнаем, как проверить, пуст ли список.

Рекомендуем хостинг TIMEWEB
По статье задано0 вопрос(ов)
Источник: pytutorial
Подписчики
- 5717
- 0
- 1
- 1
- 0
- 2
- 0
Автор, очень плохой совет, не делайте так никогда.
делайте как написал Анатолий Жучков, в коментариях
- 0
- 0
- 0
-
→ Анатолий Жучков
- 15 апреля 2020 г. 6:16
thanks
but if i wanna to check if list is exists how can i do that?
- 0
- 0
- 0
-
→ Said Py
- 15 апреля 2020 г. 13:11
It works similar. If list not exists, then list is None
Therefore the following code is right
- 0
- 1
- 0
-
→ Said Py
- 15 апреля 2020 г. 13:16
I am admin of this site, and I want ask you add special separator in your articles, like this
This is special separator, which separate preview part from main part of article. Please, use it in articles (notes) on this site.
I think you saw some changes in articles after first publication. Just I made moderation and some cleaning of article for improvement of content.
- 0
- 1
- 0
Комментарии
Timeweb
Позвольте мне порекомендовать вам отличный хостинг, на котором расположен EVILEG.
В течение многих лет Timeweb доказывает свою стабильность.
Для проектов на Django рекомендую VDS хостинг
Поделиться в социальных сетях
Donate
Проект EVILEG перешёл на некоммерческую основу и будет развиваться исключительно на энтузиазме создателя сайта, энтузиазме пользователей, пожертвованиях и реферальной системе хостинга
Как проверить, пустой ли список в Python
Чтобы проверить, пуст ли список в Python, вы можете написать условие, если длина списка равна нулю. Или вы можете напрямую использовать ссылку на список вместе с оператором not в качестве условия в операторе if.
Ниже приводится синтаксис для использования оператора not и список в качестве условия для проверки того, является ли список пустым.
В приведенном выше операторе If операторы внутри блока выполняются только в том случае, если myList не пуст.
Ниже приводится синтаксис использования длины списка для формирования условия проверки того, является ли список пустым.
Если список пуст, то в нем будет ноль элементов. Используйте встроенную функцию len() и передайте список в качестве аргумента. Функция возвращает целое число, представляющее количество элементов в списке. Если список пуст, len() возвращает 0, а условие len (myList) == 0 становится истинным.
Пример 1
В следующей программе мы инициализируем пустой список и программно проверяем, является ли список пустым или нет, используя оператор not и ссылку на список.
Пример 2
В следующей программе мы инициализируем пустой список и программно проверяем, является ли список пустым или нет, с помощью функции len().