这可能只是白痴,但对我来说有点混乱:
In [697]: l=[]
In [698]: bool(l)
Out[698]: False
In [699]: l == True
Out[699]: False
In [700]: l == False
Out[700]: False
In [701]: False == False
Out[701]: True
为什么在l==False
返回False
时False == False
返回True
?
您正在根据布尔值的文字值检查它False
。一样'A' == False
不会是真的。
如果将其投射,您将看到区别:
>>> l = []
>>> l is True
False
>>> l is False
False
>>> l == True
False
>>> l == False
False
>>> bool(l) == False
True
究其原因False == False
是真实的,因为你是比较相同的对象。与2 == 2
或相同'A' == 'A'
。
当您看到类似的东西if l:
并且此检查从未通过时,困难就来了。那是因为您正在检查项目的 真实值 。按照惯例,所有这些项目都将通过布尔检查失败-
也就是说,它们的布尔值将为False
:
None
False
(明显)''
,[]
,()
0
,0.0
,等。{}
一个空字典)len()
回报0
这些称为“假”值。 _ 其他一切都是“真实的”_ 。这可能会导致一些奇怪的事情,例如:
>>> def foo():
... pass
...
>>> bool(foo)
True
在这里还需要注意的是 ,不返回显式值的方法总是将None
其返回类型作为其返回类型,从而导致以下问题:
>>> def bar():
... x = 1+1
...
>>> bool(bar)
True
>>> bool(bar())
False
我知道我可以测试列表是否为空,如下所示: 但我不明白为什么下一个代码不是等效的:
嘿,好吧,所以我在阅读Python的文档,它指出任何空字符串、列表、字典,我想它们都被称为对象(我真的不理解对象的概念:\n如果有人能向我解释,我会很高兴)。无论如何,我的问题是
问题内容: 所以我有一个关于考试作业的问题,在这个作业中,我们有一堆布尔表达式,例如: 然后,我们应该编写布尔表达式的值。为此,我使用了三值逻辑,但是当您获得如下所示的布尔表达式时,这将如何应用: 或者 通过三值逻辑可以很容易地找到第一个,但是我如何找出另外两个。 我知道这是一个非常基本的问题,但是我对此仍然是陌生的。 提前致谢 问题答案: 您需要布尔值和的三相真值表: 该表是缩写,依赖于布尔逻辑
问题内容: 我有一个值列表,需要根据给定的布尔值列表中的值进行过滤: 我使用以下行生成一个新的过滤列表: 结果是: 这条线工作正常,但是(对我而言)看起来有点过大了,我想知道是否有更简单的方法来实现这一目标。 忠告 以下答案提供了两个好的建议: 1-不要像我一样命名列表,因为它是内置函数。 2-不要比较像我做的事情,因为这是不必要的。只需使用就足够了。 问题答案: 您正在寻找: 时序比较(py3.
编辑:在阅读了建议的链接后,我不知道为什么这被标记为重复。告我。 有人能帮我理解为什么删除值吗? 采取以下措施: 返回 返回 所以我想,Python一定认为是!但令我惊讶的是,返回! A) 我错过了什么? B) 如何仅从中筛选值?
问题内容: 我在Python中有一个布尔列表 我想将其更改为与逻辑相反 的方法吗?在Python中是否有一种内置的方法(类似于call )可以执行此操作,而无需使用手写循环来反转元素? 问题答案: 列表理解很容易: 产量