【问题标题】:Is there a way to pull the index of a Python list of booleans of where short circuiting occurs?有没有办法提取发生短路的 Python 布尔值列表的索引?
【发布时间】: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)

标签: python-3.x list boolean any short-circuiting


【解决方案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 虽然它不会产生索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-30
    • 2012-06-25
    • 2010-10-01
    • 2011-11-25
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2022-06-10
    相关资源
    最近更新 更多