布尔列表中只有一个元素是真的吗?

2024-04-26 10:53:55 发布

您现在位置:Python中文网/ 问答频道 /正文

确定布尔列表中是否只有一个元素是True中的Python的最简单方法是什么?在

我在考虑将每个布尔值转换为0(false)或1(true),然后将它们相加,然后检查总和是否为1。这很简单,但我想知道是否有一个(按位)操作,如果只有一个元素为true,而其他元素都为false,则返回true,这样可以节省bool-->;int转换(无论它多么简单)。我主要是想知道这种按位操作是否存在。在


Tags: 方法gtfalsetrue元素列表intbool
1条回答
网友
1楼 · 发布于 2024-04-26 10:53:55

Pythonbool子类来自int,因此不需要进行任何转换:

>>> sum([True, False, False])
1
>>> sum([True, True, True])
3

这个解决方案不会短路。。。在某些情况下,您可能希望能够尽早纾困:

^{pr2}$

但是,除非您的boolean iterable非常大,并且您希望频繁地短路,否则在一般情况下,我希望它的性能比sum更糟糕(它可以将循环推到更优化的代码中)。在

另外,如果您正在寻找使用按位算术的聪明方法,您可以在reduce操作中使用xor

>>> from functools import reduce
>>> import operator
>>> reduce(operator.xor, [True, False, False], False)
True
>>> reduce(operator.xor, [True, False, True], False)
False
>>> reduce(operator.xor, [], False)
False
>>> reduce(operator.xor, [True], False)
True

但我不建议使用这个版本:-)

相关问题 更多 >