首页 > 解决方案 > 除了“全部”之外,还有其他方法可以检查我的目标元素之前的所有元素值是否为真?

问题描述

如果只有所有先前的元素在当前位置为真,我试图返回真。

我已经设置了all功能,但我不想这样编码

        def check(lightsOnOff, light):
        for light in lights[:light]:
            if not on:
                return False
        return True

        count = count + 1

标签: python

解决方案


一般来说all,这是一个有用的构造,我可以看到为什么它在这个表达式中看起来不对

all(list(lightsOnOff.values())[:light])

但臭的部分实际上是list(iterable)[:number]构造,它强制构造整个列表然后截断它。

重要的是,如果lightsOnOff是 a dict(不是例如 an OrderedDict),您的代码将是不确定的(请参阅底部的注释)。

如果您不想创建列表并对其进行切片,则可以利用 itertools:

from itertools import islince 
   ...
all(islice(lightsOnOff.values(), n))

作为一个框架挑战,如果您的 dict 有一个命令并且您知道键,您可以简单地将其重写为:

all(lightsOnOff[k] for k in keys[:light])

如果你的字典有有序的键,例如整数,只使用一个列表?

all(listOfLights[:light])

推荐阅读