본문 바로가기

코테 공부/python

Python 바다코끼리 연산자 := / 이중배열을 dict()로

https://school.programmers.co.kr/learn/courses/30/lessons/120883

id와 pw 있는지 확인하고 각 경우에 맞는 리턴값 주는 문제

id_pw, db 예시

["meosseugi", "1234"]  [["rardss", "123"], ["yyoom", "1234"], ["meosseugi", "1234"]]

여기선 로직보단 바다코끼리 연산자 때문에 문제 가져왔다.

타답안 풀이

def solution(id_pw, db):
    if db_pw := dict(db).get(id_pw[0]):
        return "login" if db_pw == id_pw[1] else "wrong pw"
    return "fail"

여기서 if문안에 바다코끼리 연산자를 넣으면서 dictionary 에서 get 메서드를 통해 해당 id가 없다면 None을 반환하여 "fail"이 출력되도록 조건문을 걸었고

있다면 조건문에서 True를 반환, 해당 id의 value값을 db_pw 에 할당함으로써 pw 까지 같다면 "login" 틀리다면 "wrong pw"를 반환하도록 짜놓셨다.

저렇게 이중배열이 2개씩 리스트로 주어지면 dict()를 통해 key:val로 전환 가능한것도 이번에 처음 알았다.

 

바다코끼리 연산자 :=

변수 := 표현식

표현식의 결과를 변수에 할당하고 동시에 반환 (변수 = 표현식 할당하고, return 변수)

뭐 특별한 매개인자 이런게 있는것도 아니라 그냥 말그대로 할당도 해주고 반환도 해주는거라 설명이 길지 않다.

가독성을 높이기도 하고 두번 호출할 걸 한번 호출해줄 수 있다는 점에서 간편한듯 하다.

주로 조건문에서 많이 사용되는 듯 한데

a = ["1","2","3","4","5","6","7","8","9","10","11","12"]
if (n := len(a)) > 10:
    print(f"List is too long ({n} elements, expected <= 10)")

#이렇듯 len(a)를 두번 호출할 필요 없이 조건문에서 체크과 할당이 한번에 이루어진다.
#결과
#List is too long (12 elements, expected <= 10)


if result := 'walrus' in (s := 'cute walrus oink oink'):
    print(s) #cute walrus oink oink
    print(result) #True

위의 프로그래머스 문제 예시에서도 마찬가지로 중복 호출을 방지할 수 있어 유용하다.

이 외에도 while문, list comprehension의 조건문 등에도 사용 가능하다.

 

 

 

https://docs.python.org/ko/3/whatsnew/3.8.html