难道保证False == 0
和True == 1
,在Python(假设他们没有被用户重新分配)?例如,无论Python的版本(现有的,可能的,未来的版本)是什么,它是否以任何方式保证以下代码将始终产生相同的结果?
0 == False # True
1 == True # True
['zero', 'one'][False] # is 'zero'
Run Code Online (Sandbox Code Playgroud)
任何对官方文档的引用都将非常感谢!
编辑:正如许多答案所述,bool
继承自int
.因此,问题可以改写为:"文档是否正式表明程序员可以依赖于从整数继承的布尔值,以及值0
和1
?".这个问题与编写由于实现细节而不会失败的健壮代码有关!
当通过python-memcached在memcached中存储bool时,我注意到它以整数形式返回.检查库的代码向我显示有一个地方isinstance(val, int)
被检查以将值标记为整数.
所以我在python shell中测试了它并注意到以下内容:
>>> isinstance(True, int)
True
>>> issubclass(bool, int)
True
Run Code Online (Sandbox Code Playgroud)
但为什么究竟是bool
一个子类int
呢?
它有点意义,因为布尔值基本上是一个int,它可以只取两个值,但它需要比实际整数少得多的操作/空间(没有算术,只有一点存储空间)....
我有一个数字列表,我想得到一个数字出现在符合特定条件的列表中的次数.我可以使用列表理解(或函数中的列表理解),但我想知道是否有人有更短的方式.
# list of numbers
j=[4,5,6,7,1,3,7,5]
#list comprehension of values of j > 5
x = [i for i in j if i>5]
#value of x
len(x)
#or function version
def length_of_list(list_of_numbers, number):
x = [i for i in list_of_numbers if j > number]
return len(x)
length_of_list(j, 5)
Run Code Online (Sandbox Code Playgroud)
有没有更浓缩的版本?
我试图找到一种简单快速的方法来计算列表中符合条件的对象数量.例如
class Person:
def __init__(self, Name, Age, Gender):
self.Name = Name
self.Age = Age
self.Gender = Gender
# List of People
PeopleList = [Person("Joan", 15, "F"),
Person("Henry", 18, "M"),
Person("Marg", 21, "F")]
Run Code Online (Sandbox Code Playgroud)
现在,计算此列表中与基于其属性的参数匹配的对象数量的最简单函数是什么?例如,为Person.Gender =="F"或Person.Age <20返回2.
我试图猜测哪个运营商具有优先权:( >
大于)或==
(相等).这是我的实验:
>>> 5 > 4 == 1
False
Run Code Online (Sandbox Code Playgroud)
据我所知,这有两种可能的解决方案.
>>> (5 > 4) == 1
True
>>> 5 > (4 == 1)
True
Run Code Online (Sandbox Code Playgroud)
两者都没有返回False
,那么Python的第一个代码是如何解决的?
使用布尔值对列表进行索引工作正常.虽然索引应该是整数.
以下是我在控制台中尝试的内容:
>>> 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'>
Run Code Online (Sandbox Code Playgroud)
当我尝试l['0']
打印错误时,指数中预期的int类型,这是显而易见的.然后,即使是类型'True'
和'False'
存在Bool
,名单上的索引工作正常,并自动将其转换成int类型和执行操作.
请解释内部发生的事情.我是第一次发帖,所以请原谅我有任何错误.
我正在尝试查找字符串中单词的出现次数.
word = "dog"
str1 = "the dogs barked"
Run Code Online (Sandbox Code Playgroud)
我使用以下内容来计算出现次数:
count = str1.count(word)
Run Code Online (Sandbox Code Playgroud)
问题是我想要完全匹配.所以这句话的计数是0.这可能吗?
我无法将整数添加1
到现有集合中.在交互式shell中,这就是我正在做的事情:
>>> st = {'a', True, 'Vanilla'}
>>> st
{'a', True, 'Vanilla'}
>>> st.add(1)
>>> st
{'a', True, 'Vanilla'} # Here's the problem; there's no 1, but anything else works
>>> st.add(2)
>>> st
{'a', True, 'Vanilla', 2}
Run Code Online (Sandbox Code Playgroud)
这个问题是两个月前发布的,但我认为它被误解了.我使用的是Python 3.2.3.
我有一个元素列表(整数),我需要做的是快速检查此列表中有多少元素属于指定范围.示例如下.
范围从34到566
l = [9,20,413,425]
结果是2.
我当然可以使用一个简单的for循环来比较每个元素和最小值和最大值(34 <x <566)然后如果语句为真则使用计数器,但我认为可能有一个更简单的方法要做到这一点,可能还有一个漂亮的单线.
假设我有这个清单:
a = [1.1, 2, 3.1, 4, 5, 6, 7.2, 8.5, 9.1]
Run Code Online (Sandbox Code Playgroud)
我想知道有多少元素大于7.结果应该是3
.在Python中有一种优雅的方法吗?我试过count
但它不起作用.