2012-07-31 3 views
7

목록이 비어 있는지 테스트했습니다. 일반적으로 저는 len (list) == 0을 사용합니다. 목록이 비어 있는지 테스트하는 올바른 방법은 그것이 참인지 거짓인지 여부를 잠시 전에 읽었던 것을 모호하게 기억했습니다.부울을 파이썬에서 테스트합니다.

그래서 목록을 False로 시도하고 False를 반환했습니다. 어쩌면 나는 ==을 사용하고 있다고 생각 하나? 아니요, false도 반환했습니다. list가 True이면 false가 반환되고 list == True가됩니다. Best way to check if a list is empty

상단 대답은 :

if not a: 
    print "List is empty" 

그래서 내가 좀 더 주위를 검색하고 파이썬 설명서에 결국 내가 빨리 구글을하고에 끝낼 수 있도록

는 지금은 혼란 스러워요 where 4.1 상태 :

모든 객체는 if 또는 while 조건에서 사용하거나 아래의 부울 연산의 피연산자로 사용할 수 있습니다. 다음 값은 false로 간주됩니다.

예 : '',(), [].

이제 나는 혼란 스럽다. 목록이 아닌 것처럼 목록을 테스트하면 정상적으로 작동합니다. 그러나 빈 목록이 거짓이면 list가 False이거나 list == False 인 경우 왜 그냥 할 수 없습니까?

감사

답변

11

빈 목록은 거짓이 아니라 당신이 부울로 변환 할 때, 그것은 False로 변환합니다. 당신이 if 조항의 상태에서 뭔가를 넣을 때 마찬가지로 dicts, 터플, 문자열, 등 :

>>> [] == False 
False 
>>> bool([]) == False 
True 
>>> {} == False 
False 
>>> bool({}) == False 
True 

에 대한, 그것은 if을 테스트하기 위해 사용되는 그 부울 값입니다. 그래서 if someListif bool(someList)과 같습니다. 마찬가지로 not foo은 부울이 아니기 때문에 not []은 True와 같습니다.

+0

특히 [__nonzero__] (http://docs.python.org/reference/datamodel.html#object.%5F%5Fnonzero%5F%5F) 메소드가 호출됩니다. – ernie

0

목록을 False과 비교하고 목록의 진위 또는 거짓을 테스트하는 것은 사실 동일하지 않습니다. 빈 목록은 False과 같지 않지만 불린 컨텍스트에서는 False으로 동작합니다. 파이썬 bool([]) == False에서 다른로

print (bool([]) == False) # will print True 
print ([] == False) # will print False 
2

는 말했다 :

다음은이 메이크업 감각 도움이 될 그것을 말할 수있는 또 다른 방법입니다. 파이썬 프로그래머가 종종 악용하는 한 가지는 연산자 andor이 True/False를 (반드시) 반환하지 않는다는 것입니다. 다음 사항을 고려 if 성명에서 어떻게됩니까

3 and 4 #returns 4 
0 and 8 #returns 0 -- This is short-circuit evaluation 
0 or 8 #returns 8 
True or 0 #returns True -- This is short-circuit evaluation 

[] or False #returns False 
False or [] #returns [] 

이 조건이 위와 같이 평가 한 후 파이썬 암시 적 결과에 bool 호출됩니다 있다는 것입니다 - 그래서 당신은 그것을 생각할 수 :

if condition: 

은 다음과 같은 것입니다 :

if bool(condition): 

파이썬에 관한 한.마찬가지로 not 운영자 :

not condition 

not bool(condition) 
1

mylist is False 수단과 같은 일이 "mylist정확히 같은 객체 False으로라는 이름의 객체인가?"입니다

mylist == False 수단 "False?

not mylist 수단에 mylist동등이라는 목적"라는 오브젝트 mylist falsily 작동 하는가? 이들의


어느 것도 해당되지 않습니다 : 1 is not 1.0하지만 1 == 1.0[] != False하지만 not [] is True.

관련 문제