False相当于0并且True是等价的,1因此可以做这样的事情:
def bool_to_str(value):
"""value should be a bool"""
return ['No', 'Yes'][value]
bool_to_str(True)
Run Code Online (Sandbox Code Playgroud)
请注意值是如何bool但是用作int.
这是使用Pythonic还是应该避免?
我试图找到一种简单快速的方法来计算列表中符合条件的对象数量.例如
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.
我刚开始研究Python中的set数据类型.出于某种原因,每当我将布尔值True添加到集合时,它都不会出现.但是,如果我将False添加到集合中,它将成为集合的元素.当我用谷歌搜索这个问题时,我感到很震惊.
example1 = {1, 2, 7, False}
example2 = {7, 2, 4, 1, True}
print(example1)
print(example2)
Run Code Online (Sandbox Code Playgroud)
输出是:
{False, 1, 2, 7}
{1, 2, 4, 7}
Run Code Online (Sandbox Code Playgroud) 我写了一个简单的Eratosthenes筛子,它使用了一个列表,如果不是素数则将它们变成零,如下:
def eSieve(n): #Where m is fixed-length list of all integers up to n
'''Creates a list of primes less than or equal to n'''
m = [1]*(n+1)
for i in xrange(2,int((n)**0.5)+1):
if m[i]:
for j in xrange(i*i,n+1,i):
m[j]=0
return [i for i in xrange(2,n) if m[i]]
Run Code Online (Sandbox Code Playgroud)
我测试了它运行的速度%timeit并获得:
#n: t
#10**1: 7 ?s
#10**2: 26.6 ?s
#10**3: 234 ?s
#10**4: 2.46 ms
#10**5: 26.4 ms
#10**6: 292 ms
#10**7: 3.27 s
Run Code Online (Sandbox Code Playgroud)
我假设,如果我改变[1]并且0使用布尔值,它会跑得更快......但它恰恰相反:
#n: t …Run Code Online (Sandbox Code Playgroud) 我无法将整数添加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.
我有一个我正在浏览的程序和本节
temp = [1,2,3,4,5,6]
temp[temp!=1]=0
print temp
Run Code Online (Sandbox Code Playgroud)
如果运行会给出结果:
[1, 0, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
我需要帮助了解导致此结果的代码中发生了什么.
在Python中定义True和False的顺序,还是作为实现细节保留?
从控制台,我在True之前看到False排序......但我不知道这是否是我应该依赖的行为.
(我确定有一些关于这个的Python文档,但我找不到它......)
我不明白这一行q.append(p[i] * (hit * pHit + (1-hit) * pMiss)),因为变量hit是一个布尔值.那个布尔值来自那里发生了hit
什么?我只对Python有基本的了解......还在学习它的结构.
p = [0.2, 0.2, 0.2, 0.2, 0.2]
world = ['green', 'red', 'red', 'green', 'green']
Z = 'red'
pHit = 0.6
pMiss = 0.2
def sense(p, Z):
q=[]
for i in range(len(p)):
hit = (Z == world[i])
q.append(p[i] * (hit * pHit + (1-hit) * pMiss))
s = sum(q)
for i in range(len(p)):
q[i]=q[i]/s
return q
print sense(p,Z)
Run Code Online (Sandbox Code Playgroud) 显然整数在 Python 中需要 24 个字节。我可以理解这样做是因为表示无限数字的额外花里胡哨。然而,看起来布尔数据类型也花费了 24 个字节,即使它可能只代表两个值。为什么?
编辑:我不是要求最好的方式来存储布尔值。我已经从其他答案中了解到 NumPy、BitArray 等。我的问题是为什么,而不是如何。只是为了清楚和专注,我已经删除了问题的第二部分。
In [1]: a=5
In [2]: print(["is odd", "is even"][a % 2 == 0])
is odd
In [3]: [a%2 == 0]
Out[3]: [False]
Run Code Online (Sandbox Code Playgroud)
我理解的是a % 2 == 0评估True或False.
因此,如果它是True,则相当于1并使用列表索引它将打印'is even'.
我已经读过这个,并且知道bool是一个实例int.
因此,当在索引中使用时,bool评估它的等价数即ie 0或1.
我的问题
基于直觉,我们可以知道它是否会成为一个int或多个bool
但是Python如何知道呢?是否有任何标准何时使用as bool和何时使用int?Python3文档中的任何内容都会被附加.
python ×10
boolean ×3
list ×2
set ×2
attributes ×1
count ×1
cpython ×1
object ×1
performance ×1
python-2.7 ×1
python-3.x ×1
sorting ×1