<질문>
In [27]: map( lambda f,p: f.match(p), list(patterns.itervalues()), vatids )
Out[27]: [None, <_sre.SRE_Match object at 0xb73bfdb0>, None]
목록은 모두 None이거나 그 중 하나가 re.Match 인스턴스 일 수 있습니다. 내용이 모두 없음임을 알려주기 위해 반환 된 목록에서 어떤 라이너 검사를 수행 할 수 있습니까?
<답변1>
all(v is None for v in l)
l의 모든 요소가 None이면 True를 반환합니다.
l.count (None) == len (l)은 훨씬 빠르지 만 l은 단지 반복 가능한 것이 아니라 실제 목록이어야합니다.
<답변2>
not any(my_list)
my_list의 모든 항목이 거짓이면 True를 반환합니다.
편집 : 일치 개체는 항상 trucy이고 None은 거짓이기 때문에, 이것은 당면한 경우에 대해 all (x is None for x in my_list)과 동일한 결과를 제공합니다. gnibbler의 답변에서 알 수 있듯이 any ()를 사용하는 것이 훨씬 빠른 대안입니다.
<답변3>
Match 개체는 절대 거짓으로 평가되지 않으므로 아무 것도 사용하지 않는 것이 좋습니다 (L).
$ python -m timeit -s"L=[None,None,None]" "all( v is None for v in L )"
100000 loops, best of 3: 1.52 usec per loop
$ python -m timeit -s"L=[None,None,None]" "not any(L)"
1000000 loops, best of 3: 0.281 usec per loop
$ python -m timeit -s"L=[None,1,None]" "all( v is None for v in L )"
100000 loops, best of 3: 1.81 usec per loop
$ python -m timeit -s"L=[None,1,None]" "not any(L)"
1000000 loops, best of 3: 0.272 usec per loop
<답변4>
또는 약간 이상하지만 :
a = [None, None, None]
set(a) == set([None])
또는:
if [x for x in a if x]: # non empty list
#do something
편집 :
def is_empty(lVals):
if not lVals:
return True
for x in lVals:
if x:
return False
return True
<답변5>
is_all_none = lambda L: not len(filter(lambda e: not e is None, L))
is_all_none([None,None,'x'])
False
is_all_none([None,None,None])
True
<답변6>
아직 제공되지 않은지도를 사용하여 접근 방식을 생각해 냈습니다.
def all_none(l):
return not any(map(None.__ne__, l))
all_none([None, None, None]) # -> True
all_none([None, None, 8]) # -> False
None .__ ne__의 사용은 언뜻보기에 예상했던 것보다 약간 이상합니다. 이 메서드는 None이 아닌 무언가가 주어지면 NotImplementedType 객체를 반환합니다.
NotImplemented가 False의 대립이되기를 바랄 것입니다. 그러나 그것은 진실입니다! 이것은 컬렉션에서 None .__ eq__를 사용하면 모든 것에 대한 값진 값을 생성한다는 것을 의미합니다.
list(map(None.__eq__, [None, None, 8]))
# -> [True, True, NotImplemented]
all(list(map(None.__eq__, [None, None, 8])))
# -> True
Python 문서에서 :
기본적으로 객체는 클래스가 False를 반환하는 bool () 메서드 또는 0을 반환하는 len () 메서드를 정의하지 않는 한 true로 간주됩니다.
대신 None .__ ne__은 None 요소에 대해 False를 반환하고 다른 요소에 대해서는 NotImplementedType 객체를 반환합니다.
list(map(None.__ne__, [None, None, 8]))
# -> [False, False, NotImplemented]
이를 사용하여 True를 반환하는 None이 아닌 요소가 있는지 확인할 수 있습니다. 나는 이것이 정신 부정 체조에 도움이된다면 이것을 두 가지 별도의 방법으로 생각하고 싶습니다.
def contains_truthy(l):
return any(map(None.__ne__, l))
def all_none(l):
return not contains_truthy(l)
나는 이것으로 어떤 벤치마킹도하지 않았지만,이 스레드에서 다른 사람들이 언급했듯이 어떤 것도 빠른 결과를 생성하지 않을 것입니다.
'개발 > Python' 카테고리의 다른 글
Python ElementTree를 문자열로 변환 (0) | 2020.09.19 |
---|---|
lxml의 태그 안의 모든 텍스트 가져 오기 (0) | 2020.09.19 |
pip를 사용하여 pylibmc를 설치할 때 오류 발생 (0) | 2020.09.19 |
"return list.sort ()"가 목록이 아닌 None을 반환하는 이유는 무엇입니까? (0) | 2020.09.18 |