반응형
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
모든 경우 True
와 False
어떤 경우에 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
반응형
'ProgramingTip' 카테고리의 다른 글
Cloudfront custom-origin 배포가 502 "오류 요청을받을 수 없습니다."를 반환합니다. (0) | 2020.11.19 |
---|---|
오류 : 각도 입력의 [ng : areq] (0) | 2020.11.19 |
imdb.load_data () 함수에 대해 'allow_pickle = False'일 때 개체 배열을로드 할 수 없음을 수정하는 방법은 무엇입니까? (0) | 2020.11.19 |
한 개체의 속성 값을 동일한 유형의 다른 개체에 자동으로 적용 하시겠습니까? (0) | 2020.11.19 |
이 C ++를 복사 할 수 있습니까? (0) | 2020.11.19 |