연쇄 비교를 단순화


254

정수 값 x이 있고 a startend값 사이에 있는지 확인해야 하므로 다음 명령문을 작성합니다.

if x >= start and x <= end:
    # do stuff

이 문장에는 밑줄이 표시되고 툴팁은

연쇄 비교 단순화

내가 알 수있는 한, 그 비교는 그들이 오는 것처럼 간단합니다. 여기서 무엇을 놓쳤습니까?


1
툴팁에서 제안을 받으면 해당 영역 위로 마우스를 가져 가면 약간의 전구가 나타납니다. 당신은 그것을 클릭하고 제안하는 변경 사항을 자동으로 삽입하도록 할 수 있습니다. 따라서 자신이해야 할 일을 볼 수 있습니다 (좋지 않으면 취소 할 수 있음).
에드워드 네드 하비

답변:


432

파이썬에서는 비교 연산"연쇄" 할 수 있는데, 이는 "연합"을 의미합니다. 귀하의 경우 다음과 같습니다.

if start <= x <= end:

참조 : https://docs.python.org/3/reference/expressions.html#comparisons


2
고마워, 나는 당신이 파이썬에서 그렇게 할 수 있다는 것을 몰랐다. 이 머리에 머리가 긁혔습니다.
Brynn McCullagh

18
사람은 이것이 어떻게되어야 하는가입니다. 그러나 다른 언어를 사용하면 당신의 이상을 잊어 버리고 생각조차하지 않아도됩니다. 그러나 이것이 바로 파이썬 때문에 놀라운 이유입니다. :)
Hakaishin

다른 체인 스타일을 권장하는 "공식"소스를 알고 있습니까? 어느 쪽이 "동일한"파이썬입니까?
Ray

나는 몰라, 때로는 파이썬이 더 많은 난간을 던지기를 바란다. x, y, z가 Pandas 시리즈 인 경우 x == y == z가 실패하고 ValueError 발생
BallpointBen

@BallpointBen : 팬더에서 기대할 수있는 방식으로 많은 것들이 작동하지 않습니다 x == y and y == z.
John Zwinck

12

다음과 같이 다시 작성할 수 있습니다.

start <= x <= end:

또는:

r = range(start, end + 1) # (!) if integers
if x in r:
    ....

5
큰 시작과 끝의 경우 불필요한 목록을 작성하기 때문에 범위는 좋지 않습니다.
Burhan Khalid

1
@BurhanKhalid 실제로, OP에 대해 언급 할 가치가 있다고 생각합니다.
Maroun

7
python3에서 범위 핸들 " contains "는 훌륭하게 포함 되므로 목록이 생성되지 않습니다.
JoshNahum

2
파이썬 3 이후 @MarounMaroun 전 xrange 같은 다양한 기능 동작합니다, 그것은 언급 할만큼 가치도
dvdvck는

5
의 사용에 대한 자세한 내용 은 "파이썬 3에서 왜"1000000000000000 in range (1000000000000001) ""를if x in range(...) 참조하십시오 .
케빈 J. 체이스

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.