基本上,正如标题所要求的-是什么使堆栈成为真?
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。真的吗?如果不是,请说明堆栈是真还是假,该逻辑会跟随队列,字典,集合...吗?
答案 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
。