【问题标题】:How to return a boolean on whether a list is at a certain size?如何返回关于列表是否为特定大小的布尔值?
【发布时间】:2019-09-08 07:24:28
【问题描述】:

我正在做一个 leetcode 问题,我需要设计一个 Circular Deque 结构。其中一个功能是检查当前容器(我正在使用列表)是否为空并返回一个布尔值。 我想到的第一个方法是: return cur_list is None 但与给定的答案相比,它有时会给出错误的答案。 然后我转而使用: return len(cur_list)==0 这很好用。 这是怎么回事?它们不一样吗?

【问题讨论】:

  • 对不起。这个问题的题目应该是'how to return a boolean on a list is empty',我写错了,发帖后不知道怎么编辑。
  • 不,那绝对不是一回事。 cur_list is None 正在检查 cur_list 是否与None完全相同的对象len(cur_list)==0 检查列表的长度是否正好为 0

标签: python-3.x list boolean


【解决方案1】:

它们绝对不一样。在 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

【讨论】:

  • 现在我知道了,非常感谢。
【解决方案2】:

它们不一样。

列表是一个可以为空的 Python 对象。例如,具有非零元素数的列表将类似于

my_list = [1, 2, 3]

然而,一个没有元素的列表(实际上仍然是一个列表对象)看起来像

my_empty_list = []

这与 Python 中的 NoneType 对象不同:

my_none_obj = None

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

【讨论】:

  • “本质上是一个空指针”真的不是一个很好的思考方式,除非你来自 C。即使那样,也不是一个很好的类比。
  • 谢谢你的解释,我明白了。
  • @juanpa.arrivillaga 完全同意 - 这就是为什么我说它不完全准确并保留我进行此比较的原因,因为当我们认为变量是一个列表时,可以使用 None 但实际上是指向一个无对象而不是一个空列表。无论如何,我同意这是一个不好的类比,我适当地编辑了我的答案。
猜你喜欢
  • 2021-11-09
  • 2019-07-06
  • 2020-02-13
  • 2012-12-06
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多