Python Bool和int比较以及带有布尔值的列表索引 [英] Python Bool and int comparison and indexing on list with boolean values

查看:820
本文介绍了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.

(由于历史原因,Bool是整数。在Python中存在bool类型之前,人们使用整数0表示假,1表示真。因此,当他们添加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比较以及带有布尔值的列表索引的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆