使用布尔值在列表上建立索引可以正常工作。虽然索引应该是整数。
以下是我在控制台中尝试的操作:
>>> 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类型并执行操作。
请解释内部发生了什么。我是第一次发布问题,因此如有任何错误,请原谅我。
发生的是布尔值实际上 是 整数。True为1,False为0。Bool是int的子类型。
>>> isinstance(True, int)
True
>>> issubclass(bool, int)
True
因此,它不是将它们转换为整数,而只是将它们用作整数。
(由于历史原因,布尔值是整数。在Python中存在布尔类型之前,人们使用整数0表示false和1表示true。因此,在添加布尔类型时,他们将布尔值设为整数以保持向后兼容性包含使用这些整数值的旧代码。例如,请参见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.
我有一个布尔方法正在对字符串进行一些错误检查。我有一个int类常量叫“numwords”=8。我将一个字符串传递给布尔方法,在该方法中,我使用.split和.length对字符串进行单词计数。一个名为“words”的int计算字符串中的单词数。完成之后,我要执行一个if语句,比较单词和数字单词。如果它们的数目相等,则返回true,否则为false。我试过==和.等于,但都没用。有什么想法吗? 我试
问题内容: 以这个为例(摘自Java regexchecker不起作用): 是否用于检查的值是否重要? 我知道有这是颇为相似。但是,很明显,这个问题只针对原始对象,而不是对象包装器;因此,将不适用。 另外,应该以不同于其他的方式对待? 问题答案: 从您的评论看来,您正在寻找使用包装器类的“最佳实践” 。但是实际上 并没有 最佳实践,因为使用此类开始是一个坏主意。使用对象包装的唯一原因是在您绝对 必
嘿,好吧,所以我在阅读Python的文档,它指出任何空字符串、列表、字典,我想它们都被称为对象(我真的不理解对象的概念:\n如果有人能向我解释,我会很高兴)。无论如何,我的问题是
我知道我可以测试列表是否为空,如下所示: 但我不明白为什么下一个代码不是等效的:
为什么与有不同的 ? 我正在使用Drools DSL,我必须实现一个规则: 我有这些DSL定义: 要求是以肯定的方式编写可重用的DSL语句,并具有否定它们的能力。
我正在努力抓住这个问题。我已经尝试了一切,但问题依然存在。基本上,我有一个随机数列表,当我试图比较循环中的值时,它抛出“indexer-ror:list-index-out-range” 我甚至尝试了范围(伦(谁)和伦(谁)。同样的事情。当把0而不是"当前技能"这是int变量它的工作。我不明白的是为什么比较两个值会抛出这个错误。这只是没有意义... 我不是在比较一个值,而是在比较索引本身吗???