학습 목표
컨테이너의 순서·중복·변경 가능성을 먼저 표시한다.
본문
핵심 이론
list는 가변 순서열, tuple은 불변 순서열, set은 중복 없는 집합, dict는 키와 값의 대응이다. set의 출력 순서를 고정해서 외우지 않는다. dict는 삽입 순서를 유지한다.
음수 인덱스는 뒤에서 센다. s[start:stop:step]은 stop을 제외하며 음수 step은 역방향이다. s[::-1]은 역순이다. 슬라이스 경계 생략은 step의 부호에 따라 해석한다.
문자열은 불변이며 split은 분리, join은 문자열들을 구분자로 연결한다. append는 원소 하나, extend는 반복 가능한 대상의 원소들을 추가한다. sort는 제자리 정렬 후 None, sorted는 새 리스트를 반환한다.
dict 순회 기본값은 키이며 items()는 키·값 쌍이다. get은 없는 키의 기본값을 지정할 수 있다. 리스트 컴프리헨션은 반복과 조건의 실행 순서를 확인한다.
슬라이싱을 실제 인덱스 목록으로 바꾼다
슬라이스 a[start:stop:step]에서 stop은 포함하지 않는다. 음수 step이면 인덱스가 감소한다. 먼저 대상 인덱스들을 써 보고 그 위치의 원소를 순서대로 가져온다. 생략된 경계는 step 방향에 따라 달라지므로 무조건 0과 len으로 치환하지 않는다.
a=[10,20,30,40,50]일 때 a[1:5:2]는 인덱스 1·
리스트는 순서가 있고 수정할 수 있다. 튜플은 원소 연결을 바꿀 수 없고, 집합은 중복을 제거하며 출력 순서를 일반적으로 고정하지 않는다. 딕셔너리는 키로 값을 찾는다. 집합의 원소 수와 리스트의 중복 포함 길이를 구별한다.
컴프리헨션은 반복 → 조건 필터 → 결과식의 순서로 풀면 된다. [x*2 for x in range(4) if x%2]는 x=1·
풀이 예시
다음 Python 3.11 이상 프로그램이 표준 출력에 기록하는 내용을 쓰시오. 마지막 줄바꿈의 유무는 답안에서 구별하지 않는다.
pairs = [("r", 2), ("b", 5), ("r", 7), ("g", 3)]
d = {k: v + 1 for k, v in pairs}
d["b"] += d["g"]
print("/".join(f"{k}:{d[k]}" for k in sorted(d)))
정답과 풀이 보기
예시 정답
b:10/g:4/r:8
풀이 과정
같은 키 r의 값은 마지막 7+1=8로 덮어쓴다. b는 6+4=10, g는 4이다. 키를 정렬해 b,g,r 순서로 출력한다.
복습 문제
답을 생각한 뒤 정답과 근거를 펼쳐 보세요.
a[:]로 만든 바깥 리스트를 수정하면 원본과 항상 완전히 독립적인가?
정답과 근거
아니다. 얕은 복사이므로 내부 가변 객체는 공유할 수 있다.
슬라이스의 끝 인덱스는 결과에 포함되는가?
정답과 근거
포함되지 않는다. 시작은 포함하고 끝은 제외한다.