除了“all”之外,还有其他方法可以检查目标元素之前的所有元素值是否为真吗?

2024-10-04 03:22:17 发布

您现在位置:Python中文网/ 问答频道 /正文

如果前面的所有元素到当前位置都为真,那么我试图返回true。你知道吗

我用all函数设置了它,但我不想这样编码

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

        count = count + 1

Tags: 函数intrue元素编码forreturnif
2条回答

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

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

但难闻的部分实际上是list(iterable)[:number]结构,它强制构建整个列表,然后将其截断。你知道吗

作为一个重要的旁白,如果lightsOnOffdict(不是例如OrderedDict),那么您的代码将是不确定的(见底部的注释)。

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

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

作为一个框架挑战,如果你的dict有一个顺序并且你知道关键点,你可以简单地重写它为:

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

如果你的dict有有序的键,比如整数,就用一个列表?你知道吗

all(listOfLights[:light])

如果您想自己在任意列表上实现all,可以执行以下操作:

my_list = [1, 7, 2, 1, None, 2, 3]
up_to_ix = 5

def my_all(some_list, up_to_index):
    for element in some_list[:up_to_index]:
        if not element:
            return False
    return True

my_all(my_list, up_to_ix)

该函数将循环遍历列表中的所有元素,直到但不包括some_index,如果它找到至少一个Falsy值,则返回False,否则返回True。你知道吗

相关问题 更多 >