ProgramingTip

any () 함수의 반대

bestdevel 2020. 11. 19. 21:49
반응형

any () 함수의 반대


Python 내장 함수 any(iterable)반복 가능한 유형 bool(element)있는지 확인하는 데 도움이 될 수 있습니다 True.

>>> l = [None, False, 0]
>>> any(l)
False
>>> l = [None, 1, 0]
>>> any(l)
True

그러나 우아한 방법이나 기능이 any(iterable)있습니까? , 다음 예와 같이 bool(element) is False반환 True됩니다.

>>> l = [True, False, True]
>>> any_false(l)
>>> True

all당신이 원하는 것을 반대하지 않는 함수는 반환, True모든 경우 TrueFalse어떤 경우에 False. 따라서 다음을 수행 할 수 있습니다.

not all(l)

사용자 정의 조건을 테스트하는 생성기 작성을 작성하십시오. 기본 진실성 테스트 에만 국한되지 않습니다 .

any(not i for i in l)

의 구현 any은 다음 가변 .

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False

따라서 조건을 if element에서 if not element다음으로 전환하십시오 .

def reverse_any(iterable):
    for element in iterable:
        if not element:
            return True
    return False

예, 물론 내장 된 속도 any또는 all다른 답변처럼 속도를 활용하지 않지만 쉬운 대안입니다.


넌 할 수있어 :

>>> l = [True, False, True]
>>> False in map(bool, l)
True

map파이썬 3에서 생성기임을 상기하십시오 . Python 2의 경우imap


MEA Culpa는 이러한 타이밍 후,하는 방법 나는 제공 손을 아래입니다 추론 느린

가장 빠른 것은 not all(l)또는 not next(filterfalse(bool, it), True)바보 같은 itertools 변형입니다. Jack Aidleys 솔루션을 사용 합니다 .

타이밍 코드 :

from itertools import filterfalse

def af1(it):
    return not all(it)

def af2(it):
    return any(not i for i in it)   

def af3(iterable):
    for element in iterable:
        if not element:
            return True
    return False    

def af4(it):
    return False in map(bool, it)   

def af5(it):
    return not next(filterfalse(bool, it), True)    

if __name__=='__main__':
    import timeit   
    for i, l in enumerate([[True]*1000+[False]+[True]*999, # False in the middle
                           [False]*2000, # all False
                            [True]*2000], # all True
                            start=1): 
        print("case:", i)
        for f in (af1, af2, af3, af4, af5):
            print("   ",f.__name__, timeit.timeit("f(l)", setup="from __main__ import f, l", number=100000), f(l) )

결과 :

case: 1
    af1 0.45357259700540453 True
    af2 4.538436588976765 True
    af3 1.2491040650056675 True
    af4 8.935278153978288 True
    af5 0.4685744970047381 True
case: 2
    af1 0.016299808979965746 True
    af2 0.04787631600629538 True
    af3 0.015038023004308343 True
    af4 0.03326922300038859 True
    af5 0.029870904982089996 True
case: 3
    af1 0.8545824179891497 False
    af2 8.786235476000002 False
    af3 2.448748088994762 False
    af4 17.90895140200155 False
    af5 0.9152941330103204 False

참고 URL : https://stackoverflow.com/questions/38869155/opposite-of-any-function

반응형