Pyd*_*man 6 python arrays list
在发布此问题后经过一些试验和错误,我观察到以下现象:
>>> [1,2][True]
2
>>>>[1,2][False]
1
>>>>[1,2,3][True]
2
Run Code Online (Sandbox Code Playgroud)
如果我添加第三个或后续元素,则无效.
有人能指出我对这些观察的解释吗?我认为这是与任何Python列表中前两个元素相关的一般属性?
谢谢
Ter*_*ryA 27
因为:
>>> True == 1
True
>>> False == 0
True
Run Code Online (Sandbox Code Playgroud)
Boolean是其子类int
.它是安全*说True == 1
和False == 0
.因此,您的代码与以下内容相同:
>>> [1, 2][1]
2
>>> [1, 2][0]
1
>>> [1, 2, 3][1]
2
Run Code Online (Sandbox Code Playgroud)
这就是为什么当你添加更多元素时,输出将保持不变.它与列表的长度无关,因为它只是影响前两个值的基本索引.
*:NB:True
并且False
在Python <= 2.7中实际上可能会被夸大.注意:
>>> True = 4
>>> False = 5
>>> print True
4
>>> print False
5
Run Code Online (Sandbox Code Playgroud)
*:但是,由于Python 3,True和False现在是关键字.尝试重现上面的代码将返回:
>>> True = 4
File "<stdin>", line 1
SyntaxError: assignment to keyword
Run Code Online (Sandbox Code Playgroud)
Jam*_*ley 12
这里发生的事情有点令人困惑,因为[1,2,3][True]
有两组[]
s以不同的方式被解释.
如果我们将代码分成几行,那么会发生什么呢?
第一组[]
s构造一个列表对象.让我们为该对象分配名称a
:
>>> [1,2,3]
[1, 2, 3]
>>> a = [1,2,3]
>>>
Run Code Online (Sandbox Code Playgroud)
第二组[]
在该列表中指定索引.你通常会看到这样的代码:
>>> a[0]
1
>>> a[1]
2
>>>
Run Code Online (Sandbox Code Playgroud)
但是直接使用列表对象同样有效,而不是给它一个名字:
>>> [1,2,3][0]
1
>>> [1,2,3][1]
2
Run Code Online (Sandbox Code Playgroud)
最后,事实证明True
并False
有可用的指标是因为他们作为整数处理.从数据模型文档:
有三种类型的整数:
普通整数......
长整数.....
布尔
这些代表真值False和True.表示值False和True的两个对象是唯一的布尔对象.布尔类型是普通整数的子类型,布尔值在几乎所有上下文中的行为分别类似于值0和1,例外的是当转换为字符串时,返回字符串"False"或"True",分别.
因此,[1,2,3][True]
相当于[1,2,3][1]