본문 바로가기

코테 공부/python

Python 코테 스터디 .maketrans(기존, 변경, 제외) / .translate(번역 매핑 테이블) / [] (빈 거) #False

arr 에서 divisor로 나눠떨어지는 것만 리스트로 반환하는 문제인데

이런식으로 or 넣어서 앞의 표현식이 false면(여기선 빈배열 []) 당연히 뒤에 [-1]이 반환되므로

아래와 같이 코드를 짤 수 있다.

def solution(arr, divisor):
    # answer = [i for i in sorted(arr) if i % divisor == 0]
    # return answer if len(answer) > 0 else [-1]
    
    return [i for i in sorted(arr) if i % divisor == 0] or [-1]

이거는.. == 의 경우만 예상한 결과랑 다른데 관련 내용 찾기가 어려웠다..

print([] == True) # False
print([] == False) # False 왜..?
print([] or [-1]) # [-1]
if []: print(True) # False
else : print(False)

# 이건 관련 내용을 찾기가 어려웠다..
print(0 == False) # True
print('' == False) # False
print([] == False) # False
print({} == False) # False

 

str.maketrans(기존, 변경, 제외)

문자열 일부를 지정 문자로 대체 정의하는 매핑 테이블(딕셔너리) 생성

문자열변수명.maketrans(바꿀 기존 문자들, 기존 문자들을 바꿀 결과 문자들, 그 와중에 제거할 문자들)

 

이렇게 한 결과를 밑에 함수에 넣어서

str.translate(번역 매핑 테이블)

바꿔야할 문자를 매핑 테이블에 설정된 값으로 변환 하고 변환된 문자열을 반환

매핑 테이블을 .maketrans() 없이 dictionary 바로 사용 시, 반드시 아스키 (ASCII) 코드로.

문자열변수명.translate(위에 maketrans의 리턴)

str = "KeepayInayTouchay."
x = "KIT"
y = "kit"

mapdict = str.maketrans(x, y)
print(mapdict)
print(str.translate(mapdict))

#{75: 107, 73: 105, 84: 116}
#keepayinaytouchay.


str = "KeepayInayTouchay."
x = "KIT"
y = "kit"
z = "ay."

mapdict = str.maketrans(x, y, z)
print(mapdict)
print(str.translate(mapdict))

#{75: 107, 73: 105, 84: 116, 97: None, 121: None, 46: None}
#keepintouch