내일배움캠프 TIL 23/08/29

김민재·2023년 8월 29일
0


  • assert(가정설정문) : assert는 뒤의 조건이 True가 아니면 AssertError를 발생시킨다. def가 잘 작동하지는 알고 싶다면, 함수에 들어가는 값과 결과를 직접 설정해놓고 잘 작동하는지 확인도 가능하다. 지금까지는 내가 짠 코드가 어떤 결과값이 나오는지에 대한 확신이 없어서 print를 자주 활용했지만 assert도 오류 확인을 위한 일종의 '방어적 프로그래밍'에 적절하게 활용할 수 있을 것 같다. 아래는 강의에서 활용한 섬 갯수를 확인하는 함수에 대한 assert 사용예이다.
assert island_bfs(grid=[
    ["1", "1", "1", "1", "0"],
    ["1", "1", "0", "1", "0"],
    ["1", "1", "0", "0", "0"],
    ["0", "0", "0", "0", "0"]
]) == 1
  • 슬라이싱(slicing) : iterable한 자료를 범위를 지정해서 잘라내는 것(?). 주어진 번호(인덱스)를 통해 추출하는 작업이라고 생각하면 될 것 같다. 형태는 [start:end:step]로 range와 유사하다.
  • map : 리스트의 요소를 지정된 함수로 처리해주는 함수. for문을 돌면서 리스트 요소를 뽑아주기 보다 경제적으로 코딩을 할 수 있다. 간단하게 map(int, a)의 의미는 a라는 리스트의 요소를 돌면서 int로 변환해준다는 뜻. 아래 같은 경우는
def check_adult(person):
    if person['age'] > 20:
        return '성인'
    else:
        return '청소년'
result = map(check_adult, people)

people이라는 리스트를 돌면서 check_adult 함수를 지나 변환된 return 값을 뽑아준다는 뜻.


코드카타를 하면서 위의 기본개념들이 막혔기 때문에 따로 정리했고, 7번문제 자연수를 거꾸로 배열해주는 문제에서 처음엔

def solution(n):
    answer = []

    for x in str(n):
        answer.append(int(x))
    answer.sort(reverse=True)
    return answer

이렇게 코드를 짰는데 오류가 났는데 문제에 대해 잘못 해석했다. 오름차순을 만들어주는 sort함수에 (reverse=True)를 입력해서 내림차순으로 정리했는데 문제는 그냥 거꾸로만 배열해줄 것을 요구한 것이었다. 위에서 말했다시피 for문 대신 map을 쓸 수 있기에 그러한 해답도 존재했다. 코드로 변환한다면 n이라는 자연수는 iterable하지 않은 int이기에 이를 str로 변환해주어야 한다. 그래서 이런 코드를 쓰면 될 것 같다. -> map(int,str(n))
여기서 이제 역순으로 배열해줘야 하는데 reversed를 사용한 해설도 있지만 슬라이싱해준다면, 전날 TIL에서도 언급했듯이 파이썬 인덱스는 음수도 가능하기 때문에, x[-1::] 이렇게 되면 x의 끝의 값 하나만 도출될 것이다. end값을 지정해주지 않았고 또한 step은 기본적으로 1이 디폴트값이기 때문에 x[-1]과 같은 의미가 된다. 다만 여기서 재밌는 활용방식을 봐서 다시 슬라이싱에 대해 체크했던 것인데, x[::-1] 이렇게 되면 step이 -1인데 슬라이싱할 배열의 순서를 지정해주지 않고 ::만 적으면 처음부터 끝까지 다 슬라이싱하게 되는데, ::-1은 step이 -1이기때문에 첫값이 x[-1], x[-2], x[-3], ... 이런식으로 진행돼서 우리가 원했던 역순의 값을 뽑아낼 수 있게 된다.

0개의 댓글