Python 3.x 如何返回关于列表是否具有特定大小的布尔值?

Python 3.x 如何返回关于列表是否具有特定大小的布尔值?,python-3.x,list,boolean,Python 3.x,List,Boolean,我正在做一个leetcode问题,我需要设计一个循环的Deque结构。函数之一是检查当前容器(我使用的是列表)是否为空并返回布尔值。 我想到的第一个方法是: 返回当前列表为无 但与给定的答案相比,它有时给出错误的答案。 然后我转向使用: 返回len(cur_list)==0 这个很好用。 这是怎么发生的?它们不一样吗?它们不一样 列表是一个可能为空的Python对象。例如,元素数不为零的列表类似于 my_list = [1, 2, 3] 但是,一个没有元素的列表(实际上仍然是一个列表对象)看起

我正在做一个leetcode问题,我需要设计一个循环的Deque结构。函数之一是检查当前容器(我使用的是列表)是否为空并返回布尔值。 我想到的第一个方法是:
返回当前列表为无
但与给定的答案相比,它有时给出错误的答案。 然后我转向使用:
返回len(cur_list)==0
这个很好用。 这是怎么发生的?它们不一样吗?

它们不一样

列表是一个可能为空的Python对象。例如,元素数不为零的列表类似于

my_list = [1, 2, 3]
但是,一个没有元素的列表(实际上仍然是一个列表对象)看起来像

my_empty_list = []
这与Python中的非类型对象不同:

my_none_obj = None

也就是说,请注意
[]!=无
。考虑这一点的一种方法是,
None
在某种意义上告诉您变量根本没有指向列表。
None
是可识别的,但与空数据结构不同

它们肯定不一样。在Python中

foo is bar
id(foo) == id(bar)
它们是等价的

如果您阅读
id
的文档,您将看到使用
is
关键字实际上是在检查两个对象是否相同

您应该仅使用
is
关键字检查对象是否为
。这是因为为了提高性能,Python在启动时创建一个
None
对象,然后在创建变量
None
时使用该对象。因此,如果两个变量是
None
,那么它们实际上是同一个对象,
foo is bar
将是
True


由于空列表肯定是与无不同的对象,要检查列表是否为空,您必须执行len(cur_list)==0,我很抱歉。这个问题的标题应该是“如何返回列表是否为空的布尔值”,我犯了一个错误,发布后不知道如何编辑。不,这绝对不是一回事
cur\u list is None
正在检查
cur\u list
是否与
None
的对象完全相同
len(cur_list)==0
检查列表的长度是否正好为0“本质上是一个空指针”不是很好的思考方式,除非您来自C。即使如此,也不是很好的类比。谢谢您的解释,我现在明白了。@juanpa.arrivillaga完全同意-这就是为什么我说它不完全精确,并保留我做这个比较的原因,因为当有一个变量,我们认为是一个列表,但实际上指向一个无对象,而不是一个空列表时,可以不使用任何变量。不管怎样,我同意这是一个糟糕的类比,我对我的答案进行了适当的编辑。现在我明白了,非常感谢。