Как вернуть логическое значение, если список имеет определенный размер? - PullRequest
1 голос
/ 18 апреля 2019

У меня проблема с leetcode, когда мне нужно спроектировать структуру Circular Deque.Одна из функций состоит в том, чтобы проверить, является ли текущий контейнер (я использую список) пустым, и вернуть логическое значение.Первый способ, о котором я думал, был: return cur_list is None, но иногда он дает неправильный ответ по сравнению с данным ответом.затем я повернулся, чтобы использовать: return len(cur_list)==0, и это прекрасно работает.Как это происходит?Разве они не одинаковы?

Ответы [ 2 ]

2 голосов
/ 18 апреля 2019

Они определенно не одинаковы. В Python строки

foo is bar
id(foo) == id(bar)

эквивалентны.

Если вы прочитаете документы для id https://docs.python.org/3/library/functions.html#id,, вы увидите, что использование ключевого слова is буквально проверяет, совпадают ли два объекта.

Вы должны использовать только ключевое слово is для проверки, является ли объект None. Это связано с тем, что для производительности Python создает один объект None при запуске, который затем используется всякий раз, когда переменная становится None. Так что если две переменные None, то они будут буквально одним и тем же объектом, а foo is bar будет True.

Поскольку пустой список [], безусловно, является объектом, отличным от None, для проверки, является ли список пустым, определенно следует сделать len(cur_list)==0

0 голосов
/ 18 апреля 2019

Они не одинаковы.

Список - это объект Python, который может быть пустым.Например, список с ненулевым числом элементов будет выглядеть примерно так:

my_list = [1, 2, 3]

Однако список без элементов (который на самом деле все еще является объектом списка) будет выглядеть как

my_empty_list = []

Что отличается от объекта NoneType в Python:

my_none_obj = None

А именно, обратите внимание, что [] != None.Один из способов думать об этом заключается в том, что None в некотором смысле говорит вам, что ваша переменная вообще не указывает на список. None идентифицируется, но отличается от пустой структуры данных.

...