有没有办法提取发生短路的 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 的 any
和 all
函数。有时,我想弄清楚布尔值列表中发生短路的位置
即
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
中创建一个真值索引的迭代器,并将其转发到第一个真值索引,这也是短路和节省空间的。
any
does short circuit 虽然它不会产生索引。
【讨论】:
以上是关于有没有办法提取发生短路的 Python 布尔值列表的索引?的主要内容,如果未能解决你的问题,请参考以下文章
python 第11课 布尔值 比较运算符 逻辑运算符 短路问题