【问题标题】:python list referred as true and false in the same time [duplicate]python列表同时称为真假[重复]
【发布时间】:2021-10-10 13:30:40
【问题描述】:

当结果总是错误时,我在 django 中编写了一个简单视图然后我注意到 if 语句在不应该触发时触发了我检查代码以意识到它是正确的这是我测试的代码

>>> li = [""]
>>> li == True
False
>>> if li:
...     print("li is true")
...
li is true
>>> li == False
False
>>> li == None
False
>>> li == True
False

我很困惑?? li == False 是 false 不应该返回 true 吗?

【问题讨论】:

  • 列表不为空,因为它包含一个项目(在这种情况下为空字符串),因此任何非空列表都是真实的(在布尔上下文中计算为 True,如在if li:)。但它与 True 不等于,因为 True 和您的列表完全不同...
  • if li:,list不为空返回true,为空返回false
  • 由于同样的原因,它也不能等于False
  • @ahmed mani,哦,好吧,这样想是有道理的。但正如蒂埃里所说,一个空字符串的列表与一个空列表是不一样的。

标签: python arraylist


【解决方案1】:

首先,您要为变量li 分配一个包含一个元素的列表。虽然,元素是一个空字符串,但它仍然是一个元素。因此,列表不为空。如果您不相信,请查看len(li);它将等于 1。 这也是if li: 语句为 True 并且它实际上打印 "li is true" 的原因。而是尝试:if []:if "",您会发现它不会打印。

现在,li==Trueli==False 都是 False,因为它检查 li 是否为 True,即 li=True,False 也是如此。此外,它应该是 li=None,因此声明 li==None 为 True。

【讨论】:

    【解决方案2】:

    Variable 不是 False 和 True,而是将变量表示为布尔表达式的方式。 Python 与 Java 等强类型语言的不同之处在于,任何表达式(甚至是变量引用)都可以计算为布尔值。参考Truth Value Testing

    默认情况下,一个对象被认为是 True,除非它的类定义了一个返回 False 的 bool() 方法或一个返回零的 len() 方法,当被调用时与对象。

    这里有 3 个要考虑的语句:

    1. li = [""]
    2. li == True
    3. if li: print("li is true")
    
    • 第 1 行,为变量 li 分配一个非空列表
    • 第 2 行,列表实例不是布尔值,因此表达式被评估为 False
    • 第 3 行,if li: ... 的计算结果与 if bool(li): print... 相同,计算结果为 True 并打印“li is true”。

    如果计算表达式 bool(li),则值为 True,因为列表变量非空且 len() 函数返回 1。空列表 len() 返回 0 所以会返回 False。

    【讨论】:

      猜你喜欢
      • 2021-05-28
      • 1970-01-01
      • 1970-01-01
      • 2020-08-28
      • 2014-02-17
      • 2019-01-30
      • 2011-05-16
      • 2018-01-14
      • 1970-01-01
      相关资源
      最近更新 更多