[PY-003][입문] 리스트·튜플·딕셔너리·집합 구분하기 > IT 기술 공유

본문 바로가기

사이트 내 전체검색

뒤로가기 IT 기술 공유

[PY-003][입문] 리스트·튜플·딕셔너리·집합 구분하기

페이지 정보

작성자 기술팀장 작성일 26-08-30 09:34 조회 248 댓글 0

본문

[이번 수업]

여러 값을 담는 Python의 리스트·튜플·딕셔너리·집합을 비교합니다. 순서, 변경 가능성, 키 조회, 중복 제거라는 선택 기준을 실행 결과로 확인합니다.

[선수지식]

PY-001의 실행 방법과 PY-002의 숫자·문자열·불리언을 읽으세요. Python 3만 사용합니다.

[학습목표]

1. 자료형의 생성 문법과 핵심 차이를 설명한다.
2. 데이터의 성격에 맞는 자료형을 선택한다.
3. 없는 딕셔너리 키와 순서 없는 집합을 안전하게 다룬다.

[핵심개념]

리스트는 순서가 있고 내용을 바꿀 수 있는 자료형입니다. 대괄호로 만들며 0부터 시작하는 위치 번호, 즉 인덱스로 항목을 읽습니다. append로 끝에 추가하고 remove나 pop으로 지울 수 있습니다.

튜플도 순서가 있어 인덱스로 읽지만 만들어진 뒤 어느 위치의 값을 다른 값으로 바꿀 수 없습니다. 한 항목 튜플은 ("Python",)처럼 쉼표가 필요합니다.

딕셔너리는 키와 값을 연결하는 매핑 자료형입니다. {"name": "민수"}에서 name이 키이고 민수가 값입니다. 없는 키를 profile["country"]처럼 읽으면 KeyError가 발생합니다. 없을 수 있는 키는 profile.get("country", "미입력")처럼 기본값을 지정할 수 있습니다.

집합은 중복 없는 항목의 모음이며 순서를 보장하지 않습니다. 출력 순서에 의존하거나 인덱스로 접근하면 안 됩니다. 빈 집합은 {}가 아니라 set()으로 만듭니다. {}는 빈 딕셔너리입니다. 목록의 중복을 없앤 뒤 일정한 순서가 필요하면 sorted(set(items))처럼 정렬한 새 리스트를 사용합니다.

선택 질문은 간단합니다. 순서가 있고 바뀌는가 하면 리스트, 위치별 의미가 고정된 묶음인가 하면 튜플, 이름표가 있는 값을 찾는가 하면 딕셔너리, 중복 없는 포함 여부가 핵심인가 하면 집합부터 검토합니다.

[따라하기]

collections_demo.py에 다음을 저장하세요.

skills = ["Python", "SQL", "Python"]
location = (35.0, 139.0)
profile = {"name": "민수", "level": "입문"}
unique_skills = sorted(set(skills))

skills.append("Git")
profile["level"] = "기초"

print("list", skills)
print("tuple", location[0], location[1])
print("dict", profile["level"])
print("set_as_sorted_list", unique_skills)
print("country", profile.get("country", "미입력"))

Windows는 py collections_demo.py, macOS·Linux는 python3 collections_demo.py로 실행합니다. 예상 결과는 다음과 같습니다.

list ['Python', 'SQL', 'Python', 'Git']
tuple 35.0 139.0
dict 기초
set_as_sorted_list ['Python', 'SQL']
country 미입력

리스트에는 중복을 유지한 채 Git이 추가됐습니다. 튜플은 위치로 두 좌표를 읽습니다. 딕셔너리는 level 키의 값을 바꿨고 get은 없는 country 대신 기본값을 돌려줍니다. 집합으로 중복을 제거한 뒤 sorted를 사용했으므로 결과 순서가 일정합니다.

[흔한 실수]

첫째, {}를 빈 집합으로 생각합니다. 둘째, 항목 하나인 튜플에서 쉼표를 빼 문자열이나 숫자로 만듭니다. 셋째, 집합의 출력 순서를 저장 순서라고 믿습니다. 넷째, 없는 딕셔너리 키를 바로 읽어 KeyError를 만납니다.

[보안 주의]

외부에서 받은 목록과 딕셔너리는 항목 수, 문자열 길이, 허용 키, 값의 자료형과 범위를 검사하세요. 매우 큰 중첩 데이터는 메모리와 CPU를 소모할 수 있으므로 입력 크기와 깊이를 제한합니다. 문자열을 Python 자료형으로 바꾸려고 eval을 사용하지 말고, JSON이면 json.loads 같은 전용 파서를 사용합니다. 그래도 파싱 뒤 구조 검증은 별도로 해야 합니다. 딕셔너리에 비밀번호·토큰을 담아 그대로 출력하거나 로그로 남기지 마세요.

[직접 해볼 과제]

세 권의 책을 각각 {"title": 제목, "tags": 태그 리스트} 딕셔너리로 만들고 전체를 리스트에 담으세요. 모든 태그를 집합으로 모아 중복을 제거한 뒤 sorted로 출력하세요. 책 한 권의 고정된 (출판연도, 쪽수) 정보는 튜플로 표현하고 선택 이유를 적습니다.

[확인문제]

1. 리스트와 튜플의 가장 중요한 차이는 무엇인가요?
2. 빈 집합은 어떻게 만들며 {}는 무엇을 만드나요?
3. 없는 딕셔너리 키를 오류 없이 기본값으로 읽으려면 무엇을 사용하나요?

[다음 학습]

다음 글은 JSTS-003 배열·객체와 불변 데이터 처리입니다. Python 트랙에서는 PY-004 함수·모듈·패키지로 이어집니다.

[공식 참고 자료]

Python 자료구조 튜토리얼
https://docs.python.org/3/tutorial/datastructures.html

Python 시퀀스 자료형
https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range

Python 딕셔너리 문서
https://docs.python.org/3/library/stdtypes.html#mapping-types-dict

Python 집합 문서
https://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset

Python 리스트·집합·딕셔너리 표현식
https://docs.python.org/3/reference/expressions.html#displays-for-lists-sets-and-dictionaries

Python JSON 문서
https://docs.python.org/3/library/json.html

댓글목록 0

등록된 댓글이 없습니다.

Copyright © 소유하신 도메인. All rights reserved.

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

PC 버전으로 보기