2016-12-06 3 views
1
>>> 5 in [1, 2, 3, 4] == False 
False 

나는이 회원 자격을 테스트하는 기괴한 방법이라고 얻고,왜 이것이 배열 멤버십 테스트로 작동하지 않습니까?

>>> 5 not in [1, 2, 3, 4] 
True 

하는 "올바른"방법입니다. 나 한테 무슨 혼란은 행동이 다른 점이다

>>> 5 in ([1, 2, 3, 4] == False) 
TypeError ... 

내가 뭔가를 분명 놓친 적이

>>> (5 in [1, 2, 3, 4]) == False 
True 

모두? (Python 2.7 및 Python 3.4에서 테스트되었습니다.)

명확히하기 위해 마지막 세 조각을 이해합니다. 첫 번째 스 니펫의 동작에 대해 묻습니다. 왜 다른가요?

+3

이것은 분명히 속는 사람이지만 적절한 속이는 후보를 찾을 수 없습니다. – user2357112

+0

OK ... 그러면 속임수라는 것을 어떻게 알 수 있습니까? –

+0

@ user2357112 - [This (http://stackoverflow.com/questions/34824578/python-in-operator-is-not-working)가 가까운 것처럼 보입니다. – TigerhawkT3

답변

3

이것은 연쇄 비교입니다. 당신은 당신이 파이썬에서

1 < 2 < 3 

을 할 수 있다고 알고 있습니다, 그것은 (1 < 2) and (2 < 3)에 해당합니다. (또는 아닐 수도 있습니다.) 이제는 in==에 대해서도 마찬가지입니다. [1, 2, 3, 4]는 전체 식 False 평가 False 동일하지이므로

5 in [1, 2, 3, 4] == False 

(5 in [1, 2, 3, 4]) and ([1, 2, 3, 4] == False) 

동일하다.

+0

굉장! 나는 사슬로 쓴 비교에 대해 안다. 나는 그들이 in에 적용되었다는 것을 몰랐다. 좋은 대답입니다! –

+0

이것은 매우 일반적인 와트입니다. 글자 그대로 * 비교 *로 정의 되었기 때문에 실제로 [비교 연산자] (https://docs.python.org/3/library/stdtypes.html#comparisons)로 문서화 된'in '과'not in'을 얻으려고했습니다. [문법] (https://docs.python.org/3/reference/grammar.html)에 있지만, bugs.python.org에 대한 많은 지원을 얻지 못했습니다. – wim

+0

문서 부족으로 버그 보고서를 작성하려고 생각했습니다. 너무; 나는 그것이 잃어버린 원인이라고 생각한다. 왜 그것이 비교 연산자인지 아는가? 이 동작이 유용 할 경우를 생각할 수 없습니다. –

관련 문제