Python возвращает False, если список пуст

97
13

В одном примере кодирования я увидел следующий фрагмент кода, который возвращает True, если список пуст и False, если не


return a == []

причина в том, чтобы избежать написания


if a:
return False
else:
return True

В реальном примере с несколькими тысячами записей есть ли разница в скорости, о которой я должен знать?

спросил(а) 2021-01-19T16:49:21+03:00 2 месяца, 3 недели назад
1
Решение
96

Нет. В обоих случаях нет разницы в скорости. Поскольку в обоих случаях сначала проверяется length списка.
В первом случае len of a сравнивается с len of [] перед любым дальнейшим сравнением. В большинстве случаев значение len должно отличаться, поэтому тест сразу возвращается.


Но чем больше pythonic-путь будет просто return not a или преобразовать его с помощью bool, а затем вернуть его:

return not a

# or

return not bool(a)

ответил(а) 2021-01-19T16:49:21+03:00 2 месяца, 3 недели назад
76

Если вы спрашиваете, какой метод будет быстрее, если поставить функцию (следовательно, return), я использовал модуль timeit для небольшого тестирования. Я помещаю каждый метод в функцию, а затем запускаю программу, чтобы увидеть, какая функция работает быстрее. Вот программа:


import timeit

def is_empty2():
a = []
if a:
return True
else:
return False

def is_empty1():
a = []
return a == []

print("Time for method 2:")
print(timeit.timeit(is_empty2))
print("")
print("Time for method 1:")
print(timeit.timeit(is_empty1))


Я запускал программу пять раз, каждый раз записывая скорость для каждой функции. Получив среднее значение за каждый раз, вот что я придумал:

method one speed(milliseconds): 0.2571859563796641
----------------------------- ------------------
method two speed(milliseconds): 0.2679253742685615

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


Я согласен с тем, что сказал Cdarke в комментариях. Пойдите с тем, который является самым ясным и кратким. Не используйте один вариант исключительно на основе его скорости. в словах Гвидо ван Росома: показатель удобочитаемости.

ответил(а) 2021-01-19T16:49:21+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема