Python Bool and int comparison and indexing on list with boolean values(Python Bool 和 int 比较以及使用布尔值对列表进行索引)
问题描述
使用布尔值对列表进行索引可以正常工作.虽然索引应该是一个整数.
Indexing on list with boolean values works fine. Though the index should be an integer.
以下是我在控制台中尝试过的:
Following is what I tried in console:
>>> l = [1,2,3,4,5,6]
>>>
>>> l[False]
1
>>> l[True]
2
>>> l[False + True]
2
>>> l[False + 2*True]
3
>>>
>>> l['0']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not str
>>> type(True)
<type 'bool'>
当我尝试 l['0']
时,它会打印出索引中预期的 int 类型的错误,这很明显.然后,即使 'True'
和 'False'
的类型是 Bool
,列表上的索引也可以正常工作并自动将其转换为 int 类型并执行操作.
When I tried l['0']
it printed error that int type expected in indices and that is obvious.
Then, even the type of 'True'
and 'False'
being Bool
, indexing on the list works fine and automatically converts it to int type and performs the operation.
请解释内部发生的情况.我是第一次发问题,如有错误请见谅.
Please explain what is going on internally. I am posting question for the first time, so please forgive me for any mistake.
推荐答案
布尔值实际上是 整数.True 为 1,False 为 0.Bool 是 int 的子类型.
What's going on is that booleans actually are integers. True is 1 and False is 0. Bool is a subtype of int.
>>> isinstance(True, int)
True
>>> issubclass(bool, int)
True
所以它没有将它们转换为整数,它只是将它们用作整数.
So it's not converting them to integers, it's just using them as integers.
(由于历史原因,Bools 是整数.在 Python 中存在 bool 类型之前,人们使用整数 0 表示 false,1 表示 true.因此,当他们添加 bool 类型时,他们将布尔值设为整数,以便保持与使用这些整数值的旧代码的向后兼容性.例如,参见 http://www.peterbe.com/plog/bool-is-int .)
(Bools are ints for historical reasons. Before a bool type existed in Python, people used the integer 0 to mean false and 1 to mean true. So when they added a bool type, they made the boolean values integers in order to maintain backward compatibility with old code that used these integer values. See for instance http://www.peterbe.com/plog/bool-is-int .)
>>> help(True)
Help on bool object:
class bool(int)
| bool(x) -> bool
|
| Returns True when the argument x is true, False otherwise.
| The builtins True and False are the only two instances of the class bool.
| The class bool is a subclass of the class int, and cannot be subclassed.
这篇关于Python Bool 和 int 比较以及使用布尔值对列表进行索引的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Python Bool 和 int 比较以及使用布尔值对列表进行索引


基础教程推荐
- 用于分类数据的跳跃记号标签 2022-01-01
- Python kivy 入口点 inflateRest2 无法定位 libpng16-16.dll 2022-01-01
- 如何让 python 脚本监听来自另一个脚本的输入 2022-01-01
- 何时使用 os.name、sys.platform 或 platform.system? 2022-01-01
- 在 Python 中,如果我在一个“with"中返回.块,文件还会关闭吗? 2022-01-01
- 线程时出现 msgbox 错误,GUI 块 2022-01-01
- 使用PyInstaller后在Windows中打开可执行文件时出错 2022-01-01
- 如何在海运重新绘制中自定义标题和y标签 2022-01-01
- Dask.array.套用_沿_轴:由于额外的元素([1]),使用dask.array的每一行作为另一个函数的输入失败 2022-01-01
- 筛选NumPy数组 2022-01-01