본문으로 건너뛰기

교육 ·

비전공자 파이썬 세트(set) 배우는 법, 중복만 없애면 끝일까요

사무실에서 엑셀로 명단을 관리하다 보면 “이 두 목록에서 겹치는 사람만 찾아줘”, “여기서 중복된 이름만 빼줘” 같은 요청을 자주 받게 됩니다. 비전공자 파이썬 세트(set) 배우는 법을 알아두면 이런 작업을 코드 한두 줄로 끝낼 수 있습니다. 리스트나 딕셔너리는 익숙한데 세트는 언제 써야 하는지 감이 안 잡히는 분들을 위해, 실무 예시로 정리해보겠습니다.

파이썬 세트(set)가 리스트와 다른 점은 뭔가요

세트는 중복을 허용하지 않고 순서를 유지하지 않는 자료형입니다. 리스트는 같은 값을 여러 번 담을 수 있고 순서가 그대로 보존되지만, 세트에 같은 값을 넣으면 하나만 남습니다. 순서가 중요한 데이터라면 리스트를, “중복 여부”와 “겹치는 항목”이 중요한 데이터라면 세트를 쓰는 것이 기본 원칙입니다.

간단한 예시를 보겠습니다.

참석자 = ["김민수", "이서연", "박지훈", "김민수", "이서연"]
참석자_세트 = set(참석자)
print(참석자_세트)
# {'김민수', '이서연', '박지훈'}

리스트에 중복으로 들어있던 이름이 세트로 바꾸는 순간 하나씩만 남습니다. 이 특성 하나만으로도 실무에서 쓸 일이 꽤 많습니다.

이미 비전공자 파이썬 리스트 배우는 법을 익히셨다면, 세트는 리스트의 확장판이 아니라 목적이 다른 도구라는 점을 이해하는 게 중요합니다. 리스트는 순서와 위치가 의미 있는 데이터, 세트는 “포함되어 있는가”와 “겹치는가”가 중요한 데이터에 씁니다.

명단 중복 제거, 세트로 몇 줄이면 됩니다

여러 부서에서 취합한 참가자 명단에 같은 사람이 여러 번 등록된 경우를 정리해보겠습니다. 엑셀에서 중복 제거 기능을 쓸 수도 있지만, 여러 파일을 합친 뒤 파이썬으로 한 번에 처리하면 더 편합니다.

import pandas as pd

df = pd.read_excel("참가자명단.xlsx")
전체_이름 = df["이름"].tolist()

중복없는_이름 = set(전체_이름)
print(f"전체 등록: {len(전체_이름)}명")
print(f"실제 인원: {len(중복없는_이름)}명")

이렇게 하면 몇 명이 중복 등록됐는지 숫자로 바로 확인할 수 있습니다. 엑셀 파일 여러 개를 취합하는 작업 자체가 낯설다면 엑셀 반복 업무, 파이썬으로 10분 만에 끝내기 글을 먼저 참고하시면 흐름을 잡기 쉽습니다.

두 명단 비교할 때, 이 질문에 답이 필요합니다

“교육 신청자 명단과 실제 참석자 명단, 둘 다 있는데 신청하고 안 온 사람은 누구인가요”라는 질문을 받으면 세트의 차집합 연산이 정답입니다. 파이썬에서는 빼기 기호 하나로 이 계산이 끝납니다.

신청자 = {"김민수", "이서연", "박지훈", "최유진", "정하늘"}
참석자 = {"김민수", "박지훈", "정하늘"}

불참자 = 신청자 - 참석자
print(불참자)
# {'이서연', '최유진'}

반대로 두 명단 모두에 있는 사람이 궁금하다면 교집합(&)을 쓰면 됩니다.

겹치는_사람 = 신청자 & 참석자
print(겹치는_사람)
# {'김민수', '박지훈', '정하늘'}

두 명단을 합쳐서 전체 인원을 구하고 싶다면 합집합(|)을 쓰면 됩니다. 엑셀에서 VLOOKUP이나 COUNTIF를 여러 번 조합해서 처리하던 작업이 파이썬에서는 연산자 하나로 끝나는 경우가 많습니다.

파이썬 세트(set), 이럴 때 씁니다

세트를 실무에서 자주 쓰는 상황들

거래처 목록 비교, 설문 응답자와 대상자 명단 대조, 여러 부서에서 올라온 파일의 항목 검증 등에서 세트가 유용합니다. 예를 들어 이번 달 거래처 목록과 지난달 거래처 목록을 비교해서 신규 거래처와 이탈 거래처를 한 번에 뽑아낼 수 있습니다.

지난달_거래처 = set(pd.read_excel("6월_거래처.xlsx")["거래처명"])
이번달_거래처 = set(pd.read_excel("7월_거래처.xlsx")["거래처명"])

신규_거래처 = 이번달_거래처 - 지난달_거래처
이탈_거래처 = 지난달_거래처 - 이번달_거래처

print(f"신규: {신규_거래처}")
print(f"이탈: {이탈_거래처}")

이런 비교 작업은 데이터가 수백, 수천 건이 되면 엑셀에서 수식으로 처리하기 번거로워지지만 세트로는 데이터 양과 무관하게 코드가 그대로 동작합니다. 데이터를 다루기 전에 값 형식이 제각각이면 비교 자체가 틀어질 수 있으니, 세트를 만들기 전에 비전공자를 위한 데이터 클렌징 입문에서 다루는 공백 제거, 형식 통일 같은 기본 정리를 먼저 해두는 것이 안전합니다.

세트를 쓸 때 주의할 점

세트는 순서를 보장하지 않기 때문에 결과를 출력할 때마다 항목 나열 순서가 달라질 수 있습니다. 순서가 중요한 보고서나 명단 출력용으로는 세트를 바로 쓰지 말고, 필요한 연산이 끝난 뒤 다시 리스트로 변환해서 정렬하는 방식을 권합니다.

결과_리스트 = sorted(신규_거래처)

또한 세트 안에는 리스트나 딕셔너리처럼 “변경 가능한” 자료형을 넣을 수 없습니다. 문자열, 숫자, 튜플처럼 값이 고정된 자료형만 세트의 원소로 들어갈 수 있다는 점도 기억해두면 에러를 줄일 수 있습니다.

세트는 딕셔너리나 리스트만큼 자주 언급되지는 않지만, 중복 제거와 명단 비교처럼 사무 현장에서 반복적으로 나오는 요청에는 가장 짧고 명확한 해법을 줍니다. 리스트, 딕셔너리, 세트를 상황에 맞게 골라 쓰는 감각이 생기면 엑셀로 하루 걸리던 비교 작업이 코드 몇 줄로 줄어드는 경험을 하게 됩니다. 픽셀앤코드는 이런 실무 중심의 파이썬 학습 로드맵을 바탕으로 비전공자 실무자를 위한 IT 교육 과정을 운영하고 있으며, 명단 관리나 데이터 취합처럼 반복되는 업무를 자동화하는 실무 컨설팅도 함께 제공하고 있습니다.