有没有办法提取发生短路的 Python 布尔值列表的索引?

Posted

技术标签:

【中文标题】有没有办法提取发生短路的 Python 布尔值列表的索引?【英文标题】:Is there a way to pull the index of a Python list of booleans of where short circuiting occurs? 【发布时间】:2020-01-29 08:13:04 【问题描述】:

我主要关注 Python 3.7 的 anyall 函数。有时,我想弄清楚布尔值列表中发生短路的位置

any([False, False, True, False, True, True])

将返回 2。

有什么方法可以在不使用循环的情况下做到这一点?

编辑:我意识到这是第一次出现的问题。其中,已经有很多解决方案了:p

【问题讨论】:

即使any 也使用循环。没有办法避免它,虽然你可以短路。也许您正在寻找next(i for i, val in enumerate(mylist) if not val) 【参考方案1】:

您可以使用itertools.takewhile,它接受一个函数和一个可迭代对象。 iterable 的每个元素都被传递到函数中,直到第一个False

>>> from itertools import takewhile
>>> lst = [False, False, True, False, True, True]
>>> len(list(takewhile(lambda x: not x, lst)))
2

cmets 的另一个选择是

next(i for i, val in enumerate(mylist) if val)

mylist 中创建一个真值索引的迭代器,并将其转发到第一个真值索引,这也是短路和节省空间的。

anydoes short circuit 虽然它不会产生索引。

【讨论】:

以上是关于有没有办法提取发生短路的 Python 布尔值列表的索引?的主要内容,如果未能解决你的问题,请参考以下文章

python 第11课 布尔值 比较运算符 逻辑运算符 短路问题

python 第11课 布尔值 比较运算符 逻辑运算符 短路问题

布尔运算符的Python优先规则[重复]

使用带有布尔表达式的数组从列表中提取值

计算 Python 列表中真正布尔值的数量

Python-布尔类型与短路计算-03.15-yulong