【发布时间】:2019-02-09 22:19:12
【问题描述】:
如果我有x 作为项目列表,为什么x[True] 或x[False] 会修改列表的第一个或第二个元素?
请看下面的代码示例:
x = [1, 2]
x[True] = 'a'
x[False] = 'b'
print(x) # --> ['a', 'b']
请解释为什么这段代码有效?
【问题讨论】:
如果我有x 作为项目列表,为什么x[True] 或x[False] 会修改列表的第一个或第二个元素?
请看下面的代码示例:
x = [1, 2]
x[True] = 'a'
x[False] = 'b'
print(x) # --> ['a', 'b']
请解释为什么这段代码有效?
【问题讨论】:
由于 x 是list,因此传递的索引被转换为整数表示。 True 和 False 的整数表示分别为 1 和 0。结果,它导致列表中的第一个和第二个元素的修改。来自Python Data model documentation:
这些代表真值 False 和 True。两个对象 表示值 False 和 True 是唯一的布尔对象。 布尔类型是整数类型的子类型,布尔值 在几乎所有情况下,其行为分别类似于值 0 和 1, 例外是当转换为字符串时,字符串 分别返回“False”或“True”。
除了带有导致字典有趣行为的列表的示例:
x = {}
x[True] = 'a'
print(x) # --> {True: 'a'}
x[1] = 'b'
print(x) # --> {True: 'b'} and not {True: 'a', 1: 'b'}
【讨论】: