有没有办法提取发生短路的 Python 布尔值列表的索引?
Is there a way to pull the index of a Python list of booleans of where short circuiting occurs?
我主要关注 Python 3.7 的 any
和 all
功能。有时,我想找出布尔值列表中短路发生的位置
即
any([False, False, True, False, True, True])
会return 2.
有什么方法可以不使用循环来做到这一点?
编辑:我意识到这是第一次出现的问题。其中,已经有很多解决方案了:p
您可以使用 itertools.takewhile
,它接受一个函数和一个可迭代对象。 iterable 的每个元素都被传递到函数中,直到第一个 False
.
>>> from itertools import takewhile
>>> lst = [False, False, True, False, True, True]
>>> len(list(takewhile(lambda x: not x, lst)))
2
评论中的另一个选项是
next(i for i, val in enumerate(mylist) if val)
生成 mylist
中真值索引的迭代器,并将其转发到第一个真值索引,这也是短路和 space-高效的。
any
does short circuit 虽然它不产生索引。
我主要关注 Python 3.7 的 any
和 all
功能。有时,我想找出布尔值列表中短路发生的位置
即
any([False, False, True, False, True, True])
会return 2.
有什么方法可以不使用循环来做到这一点?
编辑:我意识到这是第一次出现的问题。其中,已经有很多解决方案了:p
您可以使用 itertools.takewhile
,它接受一个函数和一个可迭代对象。 iterable 的每个元素都被传递到函数中,直到第一个 False
.
>>> from itertools import takewhile
>>> lst = [False, False, True, False, True, True]
>>> len(list(takewhile(lambda x: not x, lst)))
2
评论中的另一个选项是
next(i for i, val in enumerate(mylist) if val)
生成 mylist
中真值索引的迭代器,并将其转发到第一个真值索引,这也是短路和 space-高效的。
any
does short circuit 虽然它不产生索引。