2024-04-26 10:53:55 发布
网友
确定布尔列表中是否只有一个元素是True中的Python的最简单方法是什么?在
True
Python
我在考虑将每个布尔值转换为0(false)或1(true),然后将它们相加,然后检查总和是否为1。这很简单,但我想知道是否有一个(按位)操作,如果只有一个元素为true,而其他元素都为false,则返回true,这样可以节省bool-->;int转换(无论它多么简单)。我主要是想知道这种按位操作是否存在。在
Pythonbool子类来自int,因此不需要进行任何转换:
bool
int
>>> sum([True, False, False]) 1 >>> sum([True, True, True]) 3
这个解决方案不会短路。。。在某些情况下,您可能希望能够尽早纾困:
但是,除非您的boolean iterable非常大,并且您希望频繁地短路,否则在一般情况下,我希望它的性能比sum更糟糕(它可以将循环推到更优化的代码中)。在
sum
另外,如果您正在寻找使用按位算术的聪明方法,您可以在reduce操作中使用xor:
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
但我不建议使用这个版本:-)
Python
bool
子类来自int
,因此不需要进行任何转换:这个解决方案不会短路。。。在某些情况下,您可能希望能够尽早纾困:
^{pr2}$但是,除非您的boolean iterable非常大,并且您希望频繁地短路,否则在一般情况下,我希望它的性能比
sum
更糟糕(它可以将循环推到更优化的代码中)。在另外,如果您正在寻找使用按位算术的聪明方法,您可以在
reduce
操作中使用xor
:但我不建议使用这个版本:-)
相关问题 更多 >
编程相关推荐