我可以用更好的方式编写简单的 Python 代码吗?

Alb*_*rto 0 python

我应该以更好的方式重写我自己的函数。该函数接受一个迭代器和一系列布尔函数,并返回输入迭代器中元素的迭代器,该迭代器返回一个真值。

def allTrue (iterator, funz):
for i in iterator:
    count = 0
    for f in funz:
        if f(i):
            count = count+1
        if count==len(funz):
            yield i
Run Code Online (Sandbox Code Playgroud)

我试着写这个:

def allTrue2 (iterator, funz):
    return (filter (f , iterator) for f in funz)
Run Code Online (Sandbox Code Playgroud)

但这是错误的。我怎样才能改进代码?

输出:

print(list(allTrue(range(50),
               (lambda x: x % 3 == 0,
                lambda x: x > 10,
                lambda x: x < 44)
               )))

>>> [12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42]
Run Code Online (Sandbox Code Playgroud)

MrB*_*men 6

如果你想要一个单线,只是为了完整性:

def allTrue (iterator, funz):
    return (i for i in iterator if all(f(i) for f in funz))
Run Code Online (Sandbox Code Playgroud)

请注意,这会返回一个生成器,因此与使用yield.


Bło*_*tek 5

def allTrue(iterator, funz):
    for i in iterator:
        if all(f(i) for f in funz):
            yield i
Run Code Online (Sandbox Code Playgroud)