AD JB Toolbox 01

Python 강좌 / 집합으로 중복 제거하고 자료형 선택하기

집합은 중복 없는 항목을 저장하고 포함 여부나 두 모음의 관계를 계산하는 자료형입니다. 순서나 중복 횟수가 필요하면 집합으로 바꾸기 전에 그 정보가 사라져도 되는지 확인해야 합니다.

집합과 빈 중괄호 구분하기

집합은 {"food", "books"}처럼 만들고 빈 집합은 set()으로 만듭니다. 빈 중괄호 {}는 딕셔너리입니다. 항목에는 해시 가능한 값이 필요하며 리스트나 딕셔너리는 직접 넣을 수 없습니다. 집합에는 인덱스가 없고 출력 순서를 데이터 계약으로 사용할 수 없습니다.

관련 동작과 지원 조건은 집합으로 중복 제거하고 자료형 선택하기 관련 공식 문서에서 확인할 수 있습니다.

연산 뜻
a | b 합집합
a & b 교집합
a - b 차집합
a ^ b 한쪽에만 있는 항목

전체 예제와 실행 결과

별도의 실습 폴더에서 아래 파일을 UTF-8로 저장합니다. 가상환경을 선택한 터미널에서 python sets.py 명령으로 실행합니다. macOS·Ubuntu에서 가상환경을 사용하지 않는 경우 명령 이름을 python3으로 바꿉니다.

sets.py 파일의 전체 내용입니다.

used = {"food", "transport", "food"}
allowed = {"food", "books"}
print(sorted(used))
print(sorted(used & allowed))
print(sorted(used - allowed))
used.discard("missing")
print("food" in used)

예상 결과는 다음과 같습니다.

['food', 'transport']
['food']
['transport']
True

중복 제거와 검증에 활용하기

같은 값이 여러 번 등장해도 집합에는 하나만 남습니다. 예제의 used - allowed는 허용 목록에 없는 transport를 찾습니다. 결과를 화면에 안정적으로 표시하려고 sorted로 정렬했으며, 집합 자체가 정렬된 것은 아닙니다.

순서를 유지하며 문자열의 중복만 제거하려면 list(dict.fromkeys(items)) 같은 방법을 사용할 수 있습니다. 다만 원래 몇 번 등장했는지는 별도로 집계해야 합니다. 중복 제거가 잘못된 원본 데이터를 덮어버리는 정제인지, 허용되는 변환인지 먼저 구분합니다.

삭제 오류와 자료형 선택하기

remove는 항목이 없으면 KeyError를 발생시키고 discard는 없어도 넘어갑니다. 반드시 존재해야 할 항목을 지울 때는 remove가 문제를 드러내는 데 도움이 될 수 있습니다. 없어도 되는 선택 항목에는 discard가 자연스럽습니다.

같은 food를 한 번 더 추가해도 크기가 늘지 않는지, books를 used에 추가하면 교집합이 어떻게 바뀌는지 확인합니다. 금액 목록의 중복이 실제로 여러 지출을 의미한다면 set으로 중복 제거하면 합계가 틀어집니다. 순서가 필요하면 리스트, 고정된 위치의 묶음이면 튜플, 필드 이름이 필요하면 딕셔너리를 선택합니다.

같은 카테고리의 다른 글
Python 강좌 / 리스트 만들고 항목 추가·수정·삭제하기

Python 강좌 / 리스트 만들고 항목 추가·수정·삭제하기

리스트의 추가·수정·삭제와 정렬을 실행 예제로 확인합니다. sort와 sorted, 얕은 복사, 빈 목록과 반복 중 변경의 차이를 설명합니다.

Python 강좌 / 리스트·딕셔너리·집합 컴프리헨션 사용하기

Python 강좌 / 리스트·딕셔너리·집합 컴프리헨션 사용하기

리스트·딕셔너리·집합 컴프리헨션의 변환과 필터를 비교합니다. 중복 키, 빈 결과와 부수 효과를 확인하며 일반 반복문과의 선택 기준을 익힙니다.

Python 강좌 / for·range·enumerate·zip으로 반복하기

Python 강좌 / for·range·enumerate·zip으로 반복하기

for·range·enumerate·zip의 용도를 비교합니다. 번호와 지출 항목을 함께 출력하며 범위의 끝 제외, zip의 길이 불일치와 반복 중 변경 문제를 확인합니다.

Python 강좌 / 가상환경 만들기와 pip로 패키지 관리하기

Python 강좌 / 가상환경 만들기와 pip로 패키지 관리하기

venv로 프로젝트 환경을 분리하고 python -m pip로 패키지를 관리합니다. 활성화, 버전 기록, 재설치와 설치 환경 불일치 해결 기준을 익힙니다.

Python 강좌 / while·break·continue로 반복 제어하기

Python 강좌 / while·break·continue로 반복 제어하기

while의 종료 조건과 break·continue의 실행 범위를 설명합니다. 지출 입력 반복 예제로 빈 입력·음수·종료 문자를 처리하고 무한 반복 원인을 확인합니다.

Python 강좌 / 문자열 다루기: 인덱싱·슬라이싱·메서드·f-string

Python 강좌 / 문자열 다루기: 인덱싱·슬라이싱·메서드·f-string

문자열의 인덱싱·슬라이싱과 strip·split·join·f-string을 익힙니다. 원본이 변경되지 않는 특성과 CSV·SQL 처리에서 구분할 점을 설명합니다.

Python 강좌 / 집합으로 중복 제거하고 자료형 선택하기

Python 강좌 / 집합으로 중복 제거하고 자료형 선택하기

집합의 중복 제거와 합집합·교집합·차집합을 익힙니다. 허용 분류 검증 예제로 순서·횟수 정보와 remove·discard의 차이를 확인합니다.

Python 강좌 / 변수·주석·입력과 출력으로 첫 프로그램 만들기

Python 강좌 / 변수·주석·입력과 출력으로 첫 프로그램 만들기

변수 대입과 주석, input·print의 역할을 익힙니다. 입력 문자열을 금액으로 변환하고 f-string으로 출력하며 잘못된 입력의 원인을 확인합니다.

Python 강좌 / macOS·Ubuntu에서 Python 실행 환경 준비하기

Python 강좌 / macOS·Ubuntu에서 Python 실행 환경 준비하기

macOS와 Ubuntu의 Python 설치 경로를 확인하고 개발용 가상환경을 만듭니다. 시스템 Python 보호, 배포판 버전 차이와 설치 오류의 확인 기준을 함께 다룹니다.

Python 강좌 / 함수 정의하고 값 반환하기

Python 강좌 / 함수 정의하고 값 반환하기

def·매개변수·return으로 계산 함수를 작성합니다. 출력과 반환의 차이, 함수 책임과 입력 전제, 호출 오류의 확인 방법을 설명합니다.