Today I Learn
: 코드카타, 파이썬 연습문제 / 심화문제
- 코드카타
- 문제 1.
1. 문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/131118
2. 정답 코드:
select i.rest_id, i.rest_name, i.food_type, i.favorites,
i.address, round(avg(r.review_score),2) as score
from rest_info i
join rest_review r
on i.rest_id = r.rest_id
where i.address like '서울%'
group by 1,2,3,4,5
order by score desc, 4 desc
3. 오류 상황: 처음에 where 절에서 서울이 들어가기만 하면 추출하는 %서울%이라고 작성해서 오류가 생김. '서울'이라는 글자가 처음이 아닌 부분에 오게 되면 문제가 원하는 '서울'에 위치한 식당이 아니므로 틀린 답이 됨
2-1. 정답 코드 (CTE 활용) :
with score as (
select rest_id, round(avg(review_score),2) as score
from rest_review
group by rest_id
)
select i.rest_id, i.rest_name, i.food_type, i.favorites,
i.address, s.score
from rest_info i
join score s
on i.rest_id = s.rest_id
where i.address like '서울%'
order by score desc, 4 desc
2-2. 정답 코드 (서브쿼리 활용) :
select i.rest_id, i.rest_name, i.food_type, i.favorites,
i.address, s.score
from rest_info i
join (select rest_id, round(avg(review_score),2) as score
from rest_review
group by rest_id) as s
on i.rest_id = s.rest_id
where i.address like '서울%'
order by score desc, 4 desc
- 파이썬 연습문제 / 심화문제
- += 연산자와 + 연산자가 리스트(mutable 객체)를 다루는 방식의 차이
- a += [4] (In-place 수정)
- a가 가리키던 메모리 공간에 직접 값을 추가함
- a += [4] : 기존의 a 리스트를 그대로 두고, 그 뒤에 4를 붙여라!
- a = a + [4] (새로운 객체 생성 및 할당)
- 두 리스트를 합쳐서 완전히 새로운 리스트 객체를 만들어냄
- a+[4]: 메모리 어딘가에 [1,2,3,4]라는 새로운 리스트를 만듦 (기존 a는 건드리지 않음)
- a = ... : 변수 a가 방금 만든 새로운 리스트의 주소를 가리키도록 업데이트(재할당)
a = [1, 2, 3] # 리스트 mutable
b = a
print(id(a),id(b))
a += [4]
print(a, b) # [1,2,3,4], [1,2,3,4]
print(id(a),id(b)) # 주소값 그대로
a = [1, 2, 3]
b = a
print(id(a),id(b))
a = a + [4]
print(a, b) # [1,2,3,4], [1,2,3]
print(id(a),id(b)) # a는 주소값 달라짐
https://myun0506.tistory.com/31
가변 (Mutable) vs 불변 (Immutable)
- Mutable vs Immutable구분Mutable (가변)Immutable (불변)정의생성된 후 객체의 내부 상태를 변경 가능생성된 후 객체의 내부 상태를 변경 불가능대표 타입list, dict, setint, float, str, tuple수정시메모리 주소
myun0506.tistory.com
- q=p[:]의 얕은 복사 방식
- 외곽 주소: p와 q는 서로 다른 새 리스트임. 서로 다른 주솟값을 가짐
- 내부 요소:
- p[0]과 q[0]은 숫자 1의 주소를 같이 가리킴
- p[2]와 q[2]는 내부 리스트 [3,4]가 저장된 동일한 주소를 가리킴
x = [1, 2, 3]
y = x[:]
print(id(x),id(y)) # 서로 다른 주소값
x[0] = 99 # x는 주소값 그대로
print(x, y) # [99,2,3],[1,2,3]
print(id(x),id(y)) # 서로 다른 채로 유지
p = [1, 2, [3, 4]]
q = p[:]
print(id(p),id(q)) # 주소값 서로 다름
print(id(p[2]),id(p[2][0])) # but 안의 내용의 주소는 같음
print(id(q[2]),id(q[2][0]))
p[2][0] = 999
print(p, q) # [1,2,[999,4]],[1,2,[999,4]]
print(id(p),id(q)) # 주소값 서로 다른 채로 유지
https://myun0506.tistory.com/27
할당 vs 얕은 복사 vs 깊은 복사 / In-place 제자리 수정 vs Out-of-place 외부 생성
- 할당 vs 얕은 복사 vs 깊은 복사얕은 복사객체의 최상위 레벨만 복사하고, 그 안에 포함된 하위 객체들은 원본 객체와 참조를 공유함깊은 복사객체와 그 안에 포함된 모든 하위 객체까지 재귀적
myun0506.tistory.com
- append()와 +=의 차이
- t[2].append(5)
- 리스트 내부만 수정함 (할당 작업 없음)
- 튜플에 아무런 간섭을 하지 않음
- t[2] += [6]
- 리스트 수정 후 다시 할당하려함
- 튜플에서 내용물 바꾸지 말라고 차단함
- 에러는 발생하지만 리스트 안의 값은 이미 수정 # (1, 2, [3, 4, 5, 6])
t = (1, 2, [3, 4]) # 튜플 안에 리스트 포함
t[2].append(5)
print(t) # (1, 2, [3, 4, 5])
# 아래 줄이 실행된다면 어떤 일이 일어나는지(출력/에러 포함) 정확히 쓰세요.
t[2] += [6] # TypeError: 'tuple' object does not support item assignment
https://myun0506.tistory.com/31
가변 (Mutable) vs 불변 (Immutable)
- Mutable vs Immutable구분Mutable (가변)Immutable (불변)정의생성된 후 객체의 내부 상태를 변경 가능생성된 후 객체의 내부 상태를 변경 불가능대표 타입list, dict, setint, float, str, tuple수정시메모리 주소
myun0506.tistory.com
- 슬라이스 할당
- 슬라이스[:] 할당 규칙
- 오른쪽에 오는 값은 반드시 반복 가능한 객체(Iterable)여야 하며,
- 그 안의 요소들을 하나씩 꺼내어 할당함!!!
- 즉, 오른쪽에 리스트가 오든, 튜플이 오든, 문자열이 오든,
- 파이썬은 그 안의 내용물을 언패킹해서 슬라이스 자리에 끼워넣음
- 시각적 이해
- lst[1:4]라는 구간을 리스트에서 도려냄
- 오른쪽에 있는 (9,8)에서 요소를 하나씩 꺼냄 (9와 8)
- 도려낸 자리에 그 요소들을 차례대로 채워넣음
- 결과: [0, 9, 8, 4]
- 단일 인덱스 할당
- 지정된 칸에 객체를 통째로 집어넣음
# 슬라이스 할당
lst = [0, 1, 2, 3, 4]
lst[1:4] = (9, 8)
print(lst) # [0,9,8,4]
lst = [0, 1, 2, 3, 4]
lst[1:4] = [9, 8]
print(lst) # [0,9,8,4]
# 단일 인덱스 할당
lst = [0, 1, 2, 3, 4]
lst[1] = (9,8)
print(lst) # [0, (9, 8), 2, 3, 4]
https://myun0506.tistory.com/53
리스트, 튜플, 딕셔너리
- 리스트슬라이싱 기본 구조 [start:stop:step]start (시작 인덱스) - 기본값: 0stop (종료 인덱스) - 기본값: 시퀀스의 길이step (간격) - 기본값: 1step의 부호에 따라 생략된 start와 stop의 기본값이 완전히 바
myun0506.tistory.com
'[데이터분석] 부트캠프 TIL' 카테고리의 다른 글
| 20260113 TIL (0) | 2026.01.13 |
|---|---|
| 20260112 TIL (1) | 2026.01.12 |
| 20260109 TIL (1) | 2026.01.09 |
| 20260108 TIL (0) | 2026.01.08 |
| 20260107 TIL (1) | 2026.01.07 |