【问题标题】:Python list - True/False first two elements? [duplicate]Python 列表 - True/False 前两个元素? [复制]
【发布时间】:2013-07-19 09:34:15
【问题描述】:

在发布this question 之后经过反复试验,我观察到以下现象:

>>> [1,2][True]
2
>>>>[1,2][False]
1
>>>>[1,2,3][True]
2

如果我添加第三个或后续元素,则无效。

有人能指出我对这些观察结果的解释吗?我认为这是与任何 Python 列表中的前两个元素相关的一些一般属性?

谢谢

【问题讨论】:

    标签: python arrays list


    【解决方案1】:

    因为:

    >>> True == 1
    True
    >>> False == 0
    True
    

    布尔值是int 的子类。说True == 1False == 0 是安全的*。因此,您的代码等同于:

    >>> [1, 2][1]
    2
    >>> [1, 2][0]
    1
    >>> [1, 2, 3][1]
    2
    

    这就是为什么当您添加更多元素时,输出将保持不变。它与列表的长度无关,因为它只是基本索引,仅影响前两个值。


    *:注意:TrueFalse 实际上可以在 Python

    >>> True = 4
    >>> False = 5
    >>> print True
    4
    >>> print False
    5
    

    *:但是,从 Python 3 开始,True 和 False 现在是关键字。尝试重现上面的代码将返回:

    >>> True = 4
      File "<stdin>", line 1
    SyntaxError: assignment to keyword
    

    【讨论】:

    • 啊,当然。谢谢先生。
    【解决方案2】:

    这里发生的事情有点令人困惑,因为[1,2,3][True] 有两组[]s,它们以不同的方式解释。

    如果我们将代码分成几行,会更清楚一点。

    第一组[]s 构造了一个列表对象。让我们将该对象命名为a

    >>> [1,2,3]
    [1, 2, 3]
    >>> a = [1,2,3]
    >>>
    

    第二组[] 指定该列表内的索引。你通常会看到这样的代码:

    >>> a[0]
    1
    >>> a[1]
    2
    >>>
    

    但直接使用列表对象同样有效,无需为其命名:

    >>> [1,2,3][0]
    1
    >>> [1,2,3][1]
    2
    

    最后,TrueFalse 可用作索引是因为它们被视为整数。来自data model docs

    整数分为三种:

    纯整数....

    长整数.....

    布尔值

    这些代表真值 False 和 True。他们俩 表示值 False 和 True 的对象是唯一的布尔值 对象。 Boolean 类型是纯整数的子类型,Boolean 在几乎所有的情况下,值的行为分别类似于值 0 和 1 上下文,例外是当转换为字符串时, 分别返回字符串“False”或“True”。

    因此,[1,2,3][True] 等价于 [1,2,3][1]

    【讨论】:

    • 很好的解释,谢谢。
    猜你喜欢
    • 2021-09-12
    • 2019-05-05
    • 2021-04-12
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 2019-09-22
    • 2015-09-30
    相关资源
    最近更新 更多