목록의 모든 항목이 없음인지 확인하는 방법은 무엇입니까?
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입니다.일치 인스턴스.반송된 목록에서 내용이 모두라는 것을 알려주기 위해 라이너 체크 하나를 수행할 수 있습니까?None
?
all(v is None for v in l)
돌아올 것입니다True
의 모든 요소들이l
이다None
참고:l.count(None) == len(l)
훨씬 빠르지만 필요한 것은l
실재하는list
그리고 존경할 만한 것만은 아닙니다.
not any(my_list)
돌아온다True
의 모든 항목이my_list
가짜의
편집: 일치 개체는 항상 진실이고None
거짓입니다. 이는 다음과 같은 결과를 제공합니다.all(x is None for x in my_list)
당면한 사건에 대하여니블러의 답변에서 입증된 바와 같이, 사용any()
훨씬 더 빠른 대안입니다.
Match 개체는 거짓으로 평가되지 않으므로 사용하는 것이 훨씬 빠르고 좋습니다.not any(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
또는 약간 이상하지만:
a = [None, None, None]
set(a) == set([None])
OR:
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
저는 어떻게든 접근법을 생각해냈습니다.map
그것은 아직 주어지지 않았습니다.
tl;dr
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__
언뜻 보기에 예상했던 것보다 좀 이상합니다.이 메서드는 다음을 반환합니다.NotImplementedType
None이 아닌 것이 주어졌을 때 반대합니다.
당신은 그것을 바라고 있을 것입니다.NotImplemented
의 대리인이 될 것입니다.False
하지만 그것도 사실입니다!즉, 다음을 사용합니다.None.__eq__
컬렉션 전체에 걸쳐 모든 것에 대한 진실한 가치를 만들어 낼 것입니다.
list(map(None.__eq__, [None, None, 8]))
# -> [True, True, NotImplemented]
all(list(map(None.__eq__, [None, None, 8])))
# -> True
Python Docs에서:
기본적으로 개체 클래스가 False를 반환하는 bool() 메서드 또는 0을 반환하는 len() 메서드를 정의하지 않는 한 개체는 참으로 간주됩니다.
대신,None.__ne__
돌아온다False
어떤 경우에도None
요소 및 aNotImplementedType
다른 모든 것에 대한 반대:
list(map(None.__ne__, [None, None, 8]))
# -> [False, False, NotImplemented]
이것을 사용하여, 당신은 확인할 수 있습니다.any
요소가 아닙니다.None
돌아올 것입니다.True
저는 이것이 정신적 부정 체조에 도움이 된다면 두 가지 방법으로 생각하고 싶습니다.
def contains_truthy(l):
return any(map(None.__ne__, l))
def all_none(l):
return not contains_truthy(l)
저는 이것으로 어떠한 벤치마킹도 하지 않았지만, 이 스레드에서 다른 사람들이 언급했듯이,not any
빠른 결과를 얻을 수 있습니다.
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
일부 항목이 아닐 것으로 예상되는 경우None
그러면 전체 목록을 반복하는 것을 피할 수 있을 것입니다.
def check_none(l):
for x in l:
if not x is None:
return False
return True
언급URL : https://stackoverflow.com/questions/6518394/how-to-check-if-all-items-in-the-list-are-none
'programing' 카테고리의 다른 글
각 도커 이미지의 레이어 및 레이어 크기 찾기 (0) | 2023.08.10 |
---|---|
매개 변수가 포함된 콜백 함수를 전달하시겠습니까? (0) | 2023.08.10 |
엑셀 VBA의 Rnd()가 정말 이렇게 나쁜가요? (0) | 2023.08.10 |
교차 검증 등을 위해 데이터 세트를 교육 및 테스트 데이터 세트로 분할/분할하는 방법은 무엇입니까? (0) | 2023.08.10 |
Android의 Shared Preferences에서 객체를 어떻게 저장/저장합니까? (0) | 2023.08.10 |