2017-05-03 7 views
1

여러 값에 대해 동일한 비교를 수행하는 경우 if 문에 비교를 작성하는 간단한 방법이 있습니까? 이 같은 것이 가능한지 궁금한 점이 있습니다. 도와 주셔서 감사합니다!구문 및/또는 파이썬 if 문의 속기

# same as: 
# if a == 1 and b == 1 and c == 1: 
if all(x == 1 for x in (a, b, c)): 
    ... 

을하거나 운영자 체인 사용할 수 있습니다 :

a =1 
b =1 
c =1 

if a == 1 and b ==1 and c == 1: 
    print('yes') 

# It would be nice if you could do this or something like it. 
if a,b,c == 1: 
    print('this would be easier') 
+4

괜찮습니까? (a, b, c) == (1,1,2)'?? – Rafael

답변

4

당신은 and에 대한 all을 사용할 수 있습니다

if a == b == c == 1: 
    ... 

을하지만 실제 코드에서이 아주 많이 볼 수 없습니다.


or를 들어, any 사용할 수 있습니다

# same as: 
# if a == 1 or b == 1 or c == 1: 
if any(x == 1 for x in (a, b, c)): 
    ... 
지금까지 내가 기억하는 한,이 하나 더 운영자 체인 트릭이없는

하지만 당신 사용 in :

if 1 in (a, b, c): 
    ... 

이것은 성능에 영향을 미칩니다 (즉, 비교를 위해 새로운 튜플을 만듭니다). 일반적으로 이것은 매우 싸며 어떤 것에도 눈에 띄지 않지만 루프의 가장 단단한 것입니다. 값이 해쉬 경우 같은

+0

전체 목록을 평가할 것이지만 작동 할 것이다 :'all ([a == 1, b == 1, c == 1])'. 'a','b' 및'c'가 값 비싼 표현이고'a'가 이미'1'이 아니므로'b'와'c'는'(a, b, c)'에서' – Elmex80s

+0

' 평가받을 필요가 없습니다. 같은 이유로, 나는''== a == b == c'를''and''의 경우에 사용하는 것을 선호합니다. 즉, "target"을 먼저 넣는 것입니다. –

+0

@StefanPochmann - 네, 단락의 부재는 튜플에 요소가 많은 경우 (처음부터 다시 빌드하는 경우는 거의 없습니다) 또는'a','b' 및'c '는 단순한 이름 조회가 아닌 임의의 (비싼) 표현식입니다 ... 질문의 표현을 바탕으로 OP가 단순한 이름 조회를 수행하는 것처럼 보이지만 다른 경우에는 사용자의 포인트를 인식해야합니다 ... – mgilson

1

뭔가 : 3 개 모든 값은 음이 아닌 정수 경우

if set((a, b, c)) == {1}: 
    # All are 1. 

또는이 될 수있다, 번식 모두 그 결과가 1 있는지?

if a * b * c == 1: 
    # All are 1. 

일반적인 대답은 mgilson의 대답으로 all(..)입니다.

+2

곱셈 하나에 조심 ... 영리하지만 항상 효과가있는 것은 아닙니다. 'a, b, c = 1, -1, -1'을 고려하십시오 :-) – mgilson

+0

오, 음수가 아닌 숫자를 말해야했습니다. 대답을 편집하겠습니다. – SuperSaiyan

+0

'{a, b, c}'를 쓰지 않는 이유는 무엇입니까? 나는 당신이 그것을 안다는 것을 안다, 당신은 그것을 {1}'에 사용하고있다. ... –