Рубрики
Без рубрики

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

Поверьте, или нет — Как вы отвечаете на этот вопрос в своем повседневном кодексе, раскрывает ваш истинный уровень навыка на Python каждому магистратуру, который читает ваш код. Кодеры для начинающих проверьте, если список A пуст с использованием неочищенных утверждений, таких как или A == []. В то время как эти решают проблему — они проверяют, будет ли список пустые — они не … Как проверить, если список Python пуст? Подробнее “

Автор оригинала: Chris.

Поверьте, или нет – как вы отвечаете на этот вопрос в своем повседневном кодексе, раскрывает ваш истинный уровень квалификации Python каждому магистратуру, который читает ваш код.

Кодеры для начинающих Проверьте, если список А пуст, используя неочищенные заявления, такие как Лен (а) == 0 или A == [] Отказ Хотя эти решают проблему – они проверяют, является ли список пустое – они не то, что сделает мастер-кодер. Вместо этого самый питонический способ проверить, является ли списком (или любого другого, что и для этого материи), является выражением не Отказ

Вы можете называть это неявное ложное лечение (или, более формально, Гибкость типа ): Каждый объект в Python может быть включен в значение правды.

Вот пример в нашей интерактивной Python Shell – попробуйте сами!

Упражнение : Что такое выход кода, если вы добавите один элемент в список a ?

Тестирование ценности правды и гибкость типа

Python неявно связывает любой объект с логическим значением. Вот некоторые примеры:

  • Целые числа 1, 2 и 3 связаны с логией Правда Отказ
  • Целое число 0 связано с логией Ложь Отказ
  • Струны «Привет» , '42' и '0' связаны с логией Правда Отказ
  • Пустая строка '' связано с логией Ложь .

Грубо говоря, каждый раз, когда ожидается булевое значение, вы можете добавить вместо этого объекта Python. Затем объект Python будет преобразован в логическое значение. Это логическое значение будет использоваться для решения того, следует ли войти, сказать, а в то время как петля или Если утверждение. Это называется «Тип гибкости» И это один из основных дизайна Python.

По умолчанию все объекты считаются Правда Если они семантически не пустые. Пустые предметы обычно связаны с логией Ложь . Более конкретно, только если один из двух случаев выполнен, будет ли результат объекта Ложь : (i) __лен __ () Функция возвращает 0, или (ii) __bool __ () Функция возврата Ложь Отказ Вы можете переопределить эти два метода для каждого объекта.

От Документация Python Вот несколько общих объектов, которые связаны с логией Ложь :

  • Определенные константы: Нет и Ложь Отказ
  • Ноль числовых типов: 0 , 0,0 , 0J , Десятичная (0) , Фракция (0, 1)
  • Пустые порталы: '' , () , [] , {} , Установить () , Диапазон (0)

Вот некоторые примеры:

if []: print('1')

if (): print('2')

if [()]: print('3')
# 3

if 0: print('4')

if 0.00: print('5')

if 0.001: print('6')
# 6

if set(): print('7')

if [set()]: print('8')
# 8

Опять же, даже если утечка, содержит только один элемент (который может оценить на false как целое число 0 ), неявное логическое преобразование вернет Правда Потому что пустой элемент – это элемент, тем не менее.

Рекомендация Pep8: Как проверить, является ли список пустым

Поскольку некоторые читатели спорили со мной о том, как правильно проверить для пустого списка в Python, здесь Явный выдержка из стандарта PEP8 (набор правил Python о том, как написать читаемый код):

Для последовательностей, (строк, списков, кортежей), используйте тот факт, что пустые последовательности ложны:

# Correct:
if not seq:
if seq:
# Wrong:
if len(seq):
if not len(seq):

Оценки производительности

Чтобы увидеть, какие из трех методов самые быстрые, я повторял каждый метод 100 раз, используя Время течения Библиотека на моем ноутбуке с INTEL CORE I7 (TM) процессором 8-го поколения, 8 ГБ RAM-DE, я знаю – и NVIDIA Graphic Card (не то, что она имела значение).

Вот код:

import timeit
import numpy as np

setup = 'a = []'

method1 = 'if len(a) == 0: pass'
method2 = 'if a == []: pass'
method3 = 'if not a: pass'

t1 = timeit.repeat(stmt=method1, setup=setup, repeat=100)
t2 = timeit.repeat(stmt=method2, setup=setup, repeat=100)
t3 = timeit.repeat(stmt=method3, setup=setup, repeat=100)


print('Method 1: len(a) == 0')
print('avg: ' + str(np.average(t1)))
print('var: ' + str(np.var(t1)))
print()

print('Method 2: a == []')
print('avg: ' + str(np.average(t2)))
print('var: ' + str(np.var(t2)))
print()

print('Method 3: not a')
print('avg: ' + str(np.average(t3)))
print('var: ' + str(np.var(t3)))
print()

Третий метод – самый питон один с гибкостью типа. Мы измеряем прошедшее время 100 кадров каждого метода. В частности, мы заинтересованы в среднем времени и дисперсии прошедшего времени. Оба должны быть минимальными.

Наш тезис заключается в том, что третий, большинство методов Pythonic также является самым быстрым, потому что нет необходимости создавать новый пустой список (например, в методе 2) или выполнением вложенных функций, как в методе 1. Метод 3 состоит только из одного вызова функции: преобразование списка в логическое значение с помощью __bool__ или __len__ методы.

Вот результат с точки зрения прошедшего среднего времени выполнения и дисперсии runtimes:

Method 1: len(a) == 0
avg: 0.06273576400000003
var: 0.00022597495215430347

Method 2: a == []
avg: 0.034635367999999944
var: 8.290137682917488e-05

Method 3: not a
avg: 0.017685209000000004
var: 6.900910317342067e-05

Вы можете видеть, что третий метод составляет не только 50% быстрее, чем способ 2 и 75% быстрее, чем метод 3, он также имеет очень мало дисперсии. Это явно лучший метод с точки зрения производительности времени выполнения. Будучи также самым коротким способом, теперь вы можете понять, почему метод считается наиболее «питонным».

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

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

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.

Оригинал: “https://blog.finxter.com/how-to-check-if-a-python-list-is-empty/”