如何检查列表中是否包含布尔值

11

这是我的代码的一部分:

for d in errors[:]:
    if False in d:
        Ic.append(current_mA2)

而这是在错误中:

[True, True, True, False, True, True, False, True,True,True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False,False]

我只想知道列表中是否有False这个值。


如果您正在使用 False in d 来检查 d 中是否存在 False,那么应该应用同样的原则... - Eli Sadoff
3
你应该使用 if False in errors 而不是 if False in d,这样就不需要那个 for 循环了。 - zondo
有点跑题:如果一个变量被称为“errors”,我期望“True”值意味着发生了错误,“False”值意味着没有错误。这是你的行为吗?你的问题让我想到它是相反的,然后要么更改“list”的名称或更改值。 - Adirio
6个回答

22

没有人建议使用all()(Python文档在此)。

所有检查列表中的所有值是否解释为True,这意味着,如果它们中至少有一个是False,则会返回False:

> a_list = [True, True, False]
> b_list = [True, True, True]
> all(a_list)
False
> all(b_list)
True

7
为什么不直接这样做:
if False in errors:
    Ic.append(current_mA2)

如果要直接检查False是否在列表中,可以使用list实现的__contains__魔法方法来完成。


这适用于OP提出的特定情况。但要注意,如果列表“errors”包含整数0等,则它会自动返回true,例如,“False in [0,True]”返回“True”。 - Masa Sakano
这是因为在Python中,0 == FalseTrueall([0, True])也是Falsesum([True, True, True])等于3。如果你有异构列表并且必须检查是否存在False,你必须使用is - midor

1

怎么样?

isFalseIn = False in errors

我认为那个可以运行。


0

试试any

any(lambda x: x == False, errors)

any 检查集合中是否有任何元素与谓词匹配。

正如其他人指出的那样,在您的情况下,您可以直接使用:

if False in errors: 

考虑到其他选择,这是非常低效的。 - zondo
1
x = True 会引发错误... 应该写成 == True - Willem Van Onsem
@WillemVanOnsem 是的,太多函数式编程了。 - mateuszlewko
1
你应该检查 False,因为这是 OP 所要求的。 - Adirio
@zondo 为什么它效率极低?一旦找到匹配项就停止了。 - mateuszlewko
显示剩余7条评论

0

试试这个:

errors= str(errors)
for d in errors[:]:
if 'False' in d:
    Ic.append(current_mA2)

它将列表的布尔值转换为字符串以便更改它们。如果错误中包含字符串“false”,则执行相应操作。


-1

也许你可以使用一个类似于标志变量的东西

flag = false

然后,您可以对数组进行循环,并将每个元素与标志进行比较。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接