是什么使堆栈为真?

时间:2020-08-15 01:33:16

标签: python data-structures

基本上,正如标题所要求的-是什么使堆栈成为真?

1. stack = []
2. print(not stack)
True
3. stack.append(1)
4. print(not stack)
False
5. stack.append(2)
6. stack.append(3)
7. print(not stack)
False

继续添加元素...

从代码中,我意识到一个空堆栈将返回True,而包含元素的堆栈将返回False。真的吗?如果不是,请说明堆栈是真还是假,该逻辑会跟随队列,字典,集合...吗?

2 个答案:

答案 0 :(得分:2)

它是一个list,而不是“堆栈”,其真值在python语言规范Boolean operations中有所说明,该规范还涵盖了其他基本类型的真实性。

在布尔运算的上下文中,以及在表达式为 由控制流语句使用时,将解释以下值 为false:False,None,所有类型的数字零和空字符串 和容器(包括字符串,元组,列表,字典,集合 和Frozensets)。所有其他值均解释为true。 用户定义的对象可以通过提供 bool ()方法。

因此,空列表为False,非空列表为True。字典等也适用,但是用户定义的容器可以自行决定。例如,即使您问一个熊猫数据框,也会发疯:

>>> df=pd.DataFrame([0,1,0])
>>> bool(df)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/td/anaconda3/lib/python3.7/site-packages/pandas/core/generic.py", line 1479, in __nonzero__
    f"The truth value of a {type(self).__name__} is ambiguous. "
ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

答案 1 :(得分:0)

如果堆栈中有元素,则当系统询问其是否为True时,它将返回True

在您给出的示例中,您要求的相反,

not stack

,当堆栈中没有任何元素时,它将返回True;当内部没有元素时,它将返回False