相关疑难解决方法(0)

使用bool作为整体是Pythonic吗?

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还是应该避免?

python boolean

66
推荐指数
5
解决办法
8049
查看次数

具有匹配属性的对象列表中的Python计数元素

我试图找到一种简单快速的方法来计算列表中符合条件的对象数量.例如

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"或P​​erson.Age <20返回2.

python attributes list object count

36
推荐指数
4
解决办法
4万
查看次数

为什么我可以在Python的集合中添加布尔值False但不是True?

我刚开始研究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)

python set

34
推荐指数
2
解决办法
2394
查看次数

为什么我的Eratosthenes筛子使用整数比使用布尔值更快?

我写了一个简单的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)

python performance boolean cpython python-2.7

13
推荐指数
1
解决办法
266
查看次数

将数字1添加到集合无效

我无法将整数添加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.

python set python-3.x

9
推荐指数
1
解决办法
275
查看次数

使用列表进行逻辑索引

我有一个我正在浏览的程序和本节

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 list

8
推荐指数
2
解决办法
1万
查看次数

是否定义了Python的bool排序?

在Python中定义True和False的顺序,还是作为实现细节保留?

从控制台,我在True之前看到False排序......但我不知道这是否是我应该依赖的行为.

(我确定有一些关于这个的Python文档,但我找不到它......)

python sorting undefined-behavior

7
推荐指数
1
解决办法
4204
查看次数

不理解这个Python代码块.将boolean与float相乘?

我不明白这一行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 boolean type-conversion

6
推荐指数
3
解决办法
3998
查看次数

Python布尔字节大小

显然整数在 Python 中需要 24 个字节。我可以理解这样做是因为表示无限数字的额外花里胡哨。然而,看起来布尔数据类型也花费了 24 个字节,即使它可能只代表两个值。为什么?

编辑:我不是要求最好的方式来存储布尔值。我已经从其他答案中了解到 NumPy、BitArray 等。我的问题是为什么,而不是如何。只是为了清楚和专注,我已经删除了问题的第二部分。

python

6
推荐指数
1
解决办法
1万
查看次数

布尔作为int?python是如何评估的

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评估TrueFalse.

因此,如果它是True,则相当于1并使用列表索引它将打印'is even'.

我已经读过这个,并且知道bool是一个实例int.

因此,当在索引中使用时,bool评估它的等价数即ie 01.

我的问题

基于直觉,我们可以知道它是否会成为一个int或多个bool

但是Python如何知道呢?是否有任何标准何时使用as bool和何时使用int?Python3文档中的任何内容都会被附加.

python

3
推荐指数
1
解决办法
918
查看次数