Python Basic: set

2026. 5. 28. 21:55·🐍Python

1. set 생성

집합 = {값1, 값2, 값3}
집합 = set(반복가능한값)

중복을 허용하지 않는 자료형

nums = {1, 2, 3}
print(nums)  # {1, 2, 3}

nums = set([1, 2, 2, 3])
print(nums)  # {1, 2, 3}
# 주의: 빈 set은 {}가 아니라 set()
empty = set()
print(empty)  # set()

empty = {}
print(type(empty))  # <class 'dict'>

2. add()

집합.add(값)

집합에 값 하나 추가

nums = {1, 2, 3}

nums.add(4)
print(nums)  # {1, 2, 3, 4}
# 주의: 이미 있는 값은 추가되지 않음
nums = {1, 2, 3}

nums.add(2)
print(nums)  # {1, 2, 3}

3. update()

집합.update(반복가능한값)

집합에 여러 값 추가

nums = {1, 2}

nums.update([3, 4])
print(nums)  # {1, 2, 3, 4}
# 주의: 문자열은 한 글자씩 추가됨
chars = {"a"}

chars.update("bc")
print(chars)  # {'a', 'b', 'c'}

4. remove()

집합.remove(값)

특정 값 제거

nums = {1, 2, 3}

nums.remove(2)
print(nums)  # {1, 3}
# 주의: 없는 값을 제거하면 에러 발생
nums = {1, 2, 3}

nums.remove(10)  # KeyError

5. discard()

집합.discard(값)

특정 값 제거

nums = {1, 2, 3}

nums.discard(2)
print(nums)  # {1, 3}
# 주의: 없는 값을 제거해도 에러가 나지 않음
nums = {1, 2, 3}

nums.discard(10)
print(nums)  # {1, 2, 3}

6. pop()

집합.pop()

임의의 값 제거 후 반환

nums = {1, 2, 3}

result = nums.pop()
print(result)
print(nums)
# 주의: set은 순서가 없어서 어떤 값이 제거될지 예측하면 안 됨
nums = {1, 2, 3}

nums.pop()
print(nums)

7. clear()

집합.clear()

집합 전체 비우기

nums = {1, 2, 3}

nums.clear()
print(nums)  # set()
# 주의: 원본 집합이 직접 변경됨
nums = {1, 2, 3}

result = nums.clear()

print(nums)    # set()
print(result)  # None

8. union()

집합1.union(집합2)
집합1 | 집합2

합집합 구하기

a = {1, 2, 3}
b = {3, 4, 5}

result = a.union(b)
print(result)  # {1, 2, 3, 4, 5}

print(a | b)   # {1, 2, 3, 4, 5}
# 주의: 원본 집합은 변경되지 않음
a = {1, 2}
b = {3, 4}

a.union(b)

print(a)  # {1, 2}

9. intersection()

집합1.intersection(집합2)
집합1 & 집합2

교집합 구하기

a = {1, 2, 3}
b = {3, 4, 5}

result = a.intersection(b)
print(result)  # {3}

print(a & b)   # {3}
# 주의: 공통 값이 없으면 빈 set 반환
a = {1, 2}
b = {3, 4}

print(a & b)  # set()

10. difference()

집합1.difference(집합2)
집합1 - 집합2

차집합 구하기

a = {1, 2, 3}
b = {3, 4, 5}

result = a.difference(b)
print(result)  # {1, 2}

print(a - b)   # {1, 2}
# 주의: 방향에 따라 결과가 다름
a = {1, 2, 3}
b = {3, 4, 5}

print(a - b)  # {1, 2}
print(b - a)  # {4, 5}

11. symmetric_difference()

집합1.symmetric_difference(집합2)
집합1 ^ 집합2

대칭 차집합 구하기

두 집합 중 한쪽에만 있는 값 반환

a = {1, 2, 3}
b = {3, 4, 5}

result = a.symmetric_difference(b)
print(result)  # {1, 2, 4, 5}

print(a ^ b)   # {1, 2, 4, 5}
# 주의: 양쪽에 모두 있는 값은 제외됨
a = {1, 2, 3}
b = {3, 4, 5}

print(a ^ b)  # {1, 2, 4, 5}

12. issubset()

집합1.issubset(집합2)
집합1 <= 집합2

집합1이 집합2의 부분집합인지 확인

a = {1, 2}
b = {1, 2, 3}

print(a.issubset(b))  # True
print(a <= b)         # True
# 주의: 모든 값이 포함되어 있어야 True
a = {1, 4}
b = {1, 2, 3}

print(a <= b)  # False

13. issuperset()

집합1.issuperset(집합2)
집합1 >= 집합2

집합1이 집합2를 포함하는지 확인

a = {1, 2, 3}
b = {1, 2}

print(a.issuperset(b))  # True
print(a >= b)           # True
# 주의: 하나라도 빠지면 False
a = {1, 2}
b = {1, 2, 3}

print(a >= b)  # False

14. isdisjoint()

집합1.isdisjoint(집합2)

두 집합에 공통 값이 없는지 확인

a = {1, 2}
b = {3, 4}

print(a.isdisjoint(b))  # True
# 주의: 공통 값이 하나라도 있으면 False
a = {1, 2}
b = {2, 3}

print(a.isdisjoint(b))  # False

15. len()

len(집합)

집합의 길이 확인

nums = {1, 2, 3}

print(len(nums))  # 3
# 주의: 중복 값은 하나로 처리됨
nums = {1, 1, 2, 2, 3}

print(nums)       # {1, 2, 3}
print(len(nums))  # 3

16. copy()

집합.copy()

집합 복사

# 성공: 집합 복사
nums = {1, 2, 3}

copied = nums.copy()

print(copied)  # {1, 2, 3}
# 성공: 서로 다른 객체
nums = {1, 2, 3}

copied = nums.copy()
copied.add(4)

print(nums)    # {1, 2, 3}
print(copied)  # {1, 2, 3, 4}
# 주의: set 안에는 변경 가능한 값은 넣을 수 없음
data = {[1, 2], [3, 4]}  # TypeError

17. in

값 in 집합

집합 안에 값이 있는지 확인

# 성공: 값이 있으면 True
nums = {1, 2, 3}

print(2 in nums)  # True
# 성공: 값이 없으면 False
nums = {1, 2, 3}

print(10 in nums)  # False
# 주의: 리스트보다 set에서 검색이 빠른 편
nums = {1, 2, 3}

print(3 in nums)  # True

18. not in

값 not in 집합

집합 안에 값이 없는지 확인

# 성공: 값이 없으면 True
nums = {1, 2, 3}

print(10 not in nums)  # True
# 성공: 값이 있으면 False
nums = {1, 2, 3}

print(2 not in nums)  # False

19. frozenset()

frozenset(반복가능한값)

수정할 수 없는 집합 생성

# 성공: 변경 불가능한 집합 생성
nums = frozenset([1, 2, 3])

print(nums)  # frozenset({1, 2, 3})
# 성공: set 안에 frozenset은 넣을 수 있음
data = {frozenset([1, 2]), frozenset([3, 4])}

print(data)  # {frozenset({1, 2}), frozenset({3, 4})}
# 주의: add(), remove() 사용 불가
nums = frozenset([1, 2, 3])

nums.add(4)  # AttributeError

20. set 특징 정리

집합 = {값1, 값2, 값3}

set은 중복이 없고 순서가 없는 자료형

# 성공: 중복 자동 제거
nums = {1, 1, 2, 2, 3}

print(nums)  # {1, 2, 3}
# 주의: 순서가 보장되지 않음
nums = {3, 1, 2}

print(nums)  # 출력 순서를 믿으면 안 됨
# 주의: 인덱싱 불가
nums = {1, 2, 3}

print(nums[0])  # TypeError

21. list → set 변환

set(리스트)

리스트의 중복 제거

# 성공: 리스트 중복 제거
nums = [1, 1, 2, 2, 3]

result = set(nums)

print(result)  # {1, 2, 3}
# 주의: 순서는 유지되지 않음
nums = [3, 1, 2, 1]

result = set(nums)

print(result)  # 순서 보장 안 됨

22. set → list 변환

list(집합)

집합을 리스트로 변환

# 성공: set을 list로 변환
nums = {1, 2, 3}

result = list(nums)

print(result)  # [1, 2, 3]
# 주의: 변환된 리스트의 순서는 보장되지 않음
nums = {3, 1, 2}

result = list(nums)

print(result)

23. set comprehension

{표현식 for 변수 in 반복가능한값}

조건에 맞는 set 생성

# 성공: 제곱값으로 set 생성
nums = {1, 2, 3}

result = {num * num for num in nums}

print(result)  # {1, 4, 9}
# 성공: 중복은 자동 제거됨
nums = [1, 1, 2, 2, 3]

result = {num for num in nums}

print(result)  # {1, 2, 3}
# 주의: {}는 빈 set이 아니라 빈 dict
result = {}

print(type(result))  # <class 'dict'>

24. union_update 느낌: update()

집합1.update(집합2)

집합1에 집합2의 값을 추가

즉, 원본 집합이 합집합처럼 변경됨

# 성공: 원본 집합에 값 추가
a = {1, 2}
b = {2, 3, 4}

a.update(b)

print(a)  # {1, 2, 3, 4}
# 주의: 원본 집합이 직접 변경됨
a = {1, 2}
b = {3, 4}

result = a.update(b)

print(a)       # {1, 2, 3, 4}
print(result)  # None

25. intersection_update()

집합1.intersection_update(집합2)

교집합 결과로 원본 집합 변경

# 성공: 공통 값만 남김
a = {1, 2, 3}
b = {2, 3, 4}

a.intersection_update(b)

print(a)  # {2, 3}
# 주의: 원본 집합이 직접 변경됨
a = {1, 2, 3}
b = {4, 5}

a.intersection_update(b)

print(a)  # set()

26. difference_update()

집합1.difference_update(집합2)

차집합 결과로 원본 집합 변경

# 성공: b에 있는 값을 a에서 제거
a = {1, 2, 3}
b = {2, 4}

a.difference_update(b)

print(a)  # {1, 3}
# 주의: 원본 집합이 직접 변경됨
a = {1, 2, 3}
b = {1, 2, 3}

a.difference_update(b)

print(a)  # set()

27. symmetric_difference_update()

집합1.symmetric_difference_update(집합2)

대칭 차집합 결과로 원본 집합 변경

# 성공: 한쪽에만 있는 값으로 변경
a = {1, 2, 3}
b = {3, 4, 5}

a.symmetric_difference_update(b)

print(a)  # {1, 2, 4, 5}
# 주의: 양쪽에 모두 있는 값은 제거됨
a = {1, 2, 3}
b = {2, 3, 4}

a.symmetric_difference_update(b)

print(a)  # {1, 4}

28. | 연산자

집합1 | 집합2

합집합

# 성공: 두 집합의 모든 값
a = {1, 2}
b = {2, 3}

print(a | b)  # {1, 2, 3}
# 주의: 중복 값은 하나만 남음
a = {1, 1, 2}
b = {2, 3}

print(a | b)  # {1, 2, 3}

29. & 연산자

집합1 & 집합2

교집합

# 성공: 공통 값만 반환
a = {1, 2, 3}
b = {2, 3, 4}

print(a & b)  # {2, 3}
# 주의: 공통 값이 없으면 빈 set
a = {1, 2}
b = {3, 4}

print(a & b)  # set()

30. - 연산자

집합1 - 집합2

차집합

# 성공: a에는 있고 b에는 없는 값
a = {1, 2, 3}
b = {2, 4}

print(a - b)  # {1, 3}
# 주의: 순서에 따라 결과가 달라짐
a = {1, 2, 3}
b = {2, 4}

print(a - b)  # {1, 3}
print(b - a)  # {4}

31. ^ 연산자

집합1 ^ 집합2

대칭 차집합

# 성공: 한쪽에만 있는 값
a = {1, 2, 3}
b = {3, 4, 5}

print(a ^ b)  # {1, 2, 4, 5}
# 주의: 양쪽에 모두 있는 값은 제외
a = {1, 2, 3}
b = {2, 3, 4}

print(a ^ b)  # {1, 4}

32. |= 연산자

집합1 |= 집합2

합집합 결과로 원본 집합 변경

# 성공: a에 b의 값을 추가
a = {1, 2}
b = {2, 3}

a |= b

print(a)  # {1, 2, 3}
# 주의: 원본 집합이 직접 변경됨
a = {1, 2}
b = {3, 4}

result = a |= b  # SyntaxError

33. &= 연산자

집합1 &= 집합2

교집합 결과로 원본 집합 변경

# 성공: 공통 값만 남김
a = {1, 2, 3}
b = {2, 3, 4}

a &= b

print(a)  # {2, 3}
# 주의: 원본 집합이 직접 변경됨
a = {1, 2}
b = {3, 4}

a &= b

print(a)  # set()

34. -= 연산자

집합1 -= 집합2

차집합 결과로 원본 집합 변경

# 성공: b에 있는 값을 a에서 제거
a = {1, 2, 3}
b = {2, 4}

a -= b

print(a)  # {1, 3}
# 주의: 원본 집합이 직접 변경됨
a = {1, 2, 3}
b = {1, 2, 3}

a -= b

print(a)  # set()

35. ^= 연산자

집합1 ^= 집합2

대칭 차집합 결과로 원본 집합 변경

# 성공: 한쪽에만 있는 값으로 변경
a = {1, 2, 3}
b = {3, 4, 5}

a ^= b

print(a)  # {1, 2, 4, 5}
# 주의: 양쪽에 모두 있는 값은 제거됨
a = {1, 2, 3}
b = {2, 3, 4}

a ^= b

print(a)  # {1, 4}

36. ==

집합1 == 집합2

두 집합이 같은지 비교

# 성공: 순서가 달라도 값이 같으면 True
a = {1, 2, 3}
b = {3, 2, 1}

print(a == b)  # True
# 주의: 값이 하나라도 다르면 False
a = {1, 2, 3}
b = {1, 2, 4}

print(a == b)  # False

37. !=

집합1 != 집합2

두 집합이 다른지 비교

# 성공: 값이 다르면 True
a = {1, 2, 3}
b = {1, 2, 4}

print(a != b)  # True
# 주의: 순서만 다른 것은 다른 집합이 아님
a = {1, 2, 3}
b = {3, 2, 1}

print(a != b)  # False

38. <

집합1 < 집합2

집합1이 집합2의 진부분집합인지 확인

# 성공: a가 b의 진부분집합
a = {1, 2}
b = {1, 2, 3}

print(a < b)  # True
# 주의: 두 집합이 같으면 False
a = {1, 2}
b = {1, 2}

print(a < b)  # False

39. >

집합1 > 집합2

집합1이 집합2의 진상위집합인지 확인

# 성공: a가 b를 완전히 포함하고 더 큼
a = {1, 2, 3}
b = {1, 2}

print(a > b)  # True
# 주의: 두 집합이 같으면 False
a = {1, 2}
b = {1, 2}

print(a > b)  # False

40. <=

집합1 <= 집합2

집합1이 집합2의 부분집합인지 확인

# 성공: 모든 값이 포함되면 True
a = {1, 2}
b = {1, 2, 3}

print(a <= b)  # True
# 성공: 같은 집합도 True
a = {1, 2}
b = {1, 2}

print(a <= b)  # True
# 주의: 하나라도 없으면 False
a = {1, 4}
b = {1, 2, 3}

print(a <= b)  # False

41. >=

집합1 >= 집합2

집합1이 집합2를 포함하는지 확인

# 성공: 모든 값을 포함하면 True
a = {1, 2, 3}
b = {1, 2}

print(a >= b)  # True
# 성공: 같은 집합도 True
a = {1, 2}
b = {1, 2}

print(a >= b)  # True
# 주의: 하나라도 빠지면 False
a = {1, 2}
b = {1, 2, 3}

print(a >= b)  # False

42. set + 반복문

for 변수 in 집합:

집합 반복 처리

# 성공: 모든 값 출력
nums = {1, 2, 3}

for num in nums:
    print(num)
# 주의: set은 순서가 보장되지 않음
nums = {1, 2, 3}

for num in nums:
    print(num)

43. set comprehension + 조건문

{표현식 for 변수 in 반복가능한값 if 조건}

조건에 맞는 값만 set 생성

# 성공: 짝수만 저장
nums = [1, 2, 3, 4, 5, 6]

result = {num for num in nums if num % 2 == 0}

print(result)  # {2, 4, 6}
# 성공: 중복 제거도 자동 처리
nums = [1, 1, 2, 2, 3, 4]

result = {num for num in nums if num % 2 == 0}

print(result)  # {2, 4}

44. set 길이 비교

len(set(리스트)) != len(리스트)

중복 존재 여부 확인

# 성공: 중복 있음
nums = [1, 2, 2, 3]

print(len(set(nums)))  # 3
print(len(nums))       # 4
# 성공: 중복 없음
nums = [1, 2, 3]

print(len(set(nums)) == len(nums))  # True
# 주의: 문자열도 가능
text = "hello"

print(set(text))  # {'h', 'e', 'l', 'o'}

45. set으로 중복 제거

list(set(리스트))

리스트 중복 제거

# 성공: 중복 제거
nums = [1, 1, 2, 2, 3]

result = list(set(nums))

print(result)  # [1, 2, 3]
# 주의: 순서가 유지되지 않음
nums = [3, 1, 2, 1]

result = list(set(nums))

print(result)

46. 순서 유지 중복 제거

list(dict.fromkeys(리스트))

순서를 유지하면서 중복 제거

# 성공: 순서 유지
nums = [3, 1, 2, 1, 3]

result = list(dict.fromkeys(nums))

print(result)  # [3, 1, 2]
# 주의: set()과 결과가 다를 수 있음
nums = [3, 1, 2, 1]

print(list(set(nums)))
print(list(dict.fromkeys(nums)))

47. immutable 값만 저장 가능

집합 = {immutable 값}

변경 불가능한 값만 저장 가능

# 성공: 숫자 저장 가능
nums = {1, 2, 3}

print(nums)
# 성공: 문자열 저장 가능
fruits = {"apple", "banana"}

print(fruits)
# 주의: 리스트는 저장 불가
data = {[1, 2], [3, 4]}  # TypeError
# 성공: tuple은 저장 가능
data = {(1, 2), (3, 4)}

print(data)

48. set 정렬

sorted(집합)

정렬된 리스트 반환

# 성공: 오름차순 정렬
nums = {3, 1, 2}

result = sorted(nums)

print(result)  # [1, 2, 3]
# 성공: 내림차순 정렬
nums = {3, 1, 2}

result = sorted(nums, reverse=True)

print(result)  # [3, 2, 1]
# 주의: 결과는 list 타입
nums = {3, 1, 2}

result = sorted(nums)

print(type(result))  # <class 'list'>

49. set + enumerate()

enumerate(집합)

집합 반복 시 번호와 함께 사용

# 성공: index와 값 함께 출력
nums = {10, 20, 30}

for idx, value in enumerate(nums):
    print(idx, value)
# 주의: set은 순서가 없어서 index 의미를 믿으면 안 됨
nums = {10, 20, 30}

for idx, value in enumerate(nums):
    print(idx, value)

50. set + unpacking

a, b, c = 집합

집합 값 언패킹

# 성공: 값 개수가 맞으면 가능
nums = {1, 2, 3}

a, b, c = nums

print(a, b, c)
# 주의: 순서가 보장되지 않음
nums = {"apple", "banana", "orange"}

a, b, c = nums

print(a, b, c)
# 주의: 개수가 다르면 에러 발생
nums = {1, 2}

a, b, c = nums  # ValueError

51. set + if문

if 값 in 집합:

특정 값 존재 여부 확인

# 성공: 값이 있으면 실행
nums = {1, 2, 3}

if 2 in nums:
    print("존재함")
# 성공: 값이 없으면 실행 안 됨
nums = {1, 2, 3}

if 10 in nums:
    print("존재함")

52. 빈 set 확인

if not 집합:

집합이 비어있는지 확인

# 성공: 빈 set이면 True
nums = set()

if not nums:
    print("비어있음")
# 성공: 값이 있으면 False
nums = {1, 2, 3}

if not nums:
    print("비어있음")
# 주의: {}는 빈 dict
nums = {}

print(type(nums))  # <class 'dict'>

53. set + max()

max(집합)

가장 큰 값 반환

# 성공: 최대값 반환
nums = {1, 5, 3}

print(max(nums))  # 5
# 성공: 문자열도 가능
fruits = {"apple", "banana", "orange"}

print(max(fruits))
# 주의: 빈 set이면 에러 발생
nums = set()

max(nums)  # ValueError

54. set + min()

min(집합)

가장 작은 값 반환

# 성공: 최소값 반환
nums = {1, 5, 3}

print(min(nums))  # 1
# 성공: 문자열도 가능
fruits = {"apple", "banana", "orange"}

print(min(fruits))
# 주의: 빈 set이면 에러 발생
nums = set()

min(nums)  # ValueError

55. set + sum()

sum(집합)

모든 값 합계

# 성공: 숫자 전체 합
nums = {1, 2, 3}

print(sum(nums))  # 6
# 성공: 중복은 이미 제거된 상태
nums = {1, 1, 2, 2, 3}

print(sum(nums))  # 6
# 주의: 문자열 포함 시 에러 발생
nums = {1, 2, "3"}

sum(nums)  # TypeError

56. set + any()

any(집합)

하나라도 True면 True

# 성공: 하나라도 True 값 존재
nums = {0, False, 3}

print(any(nums))  # True
# 성공: 모두 False 계열이면 False
nums = {0, False}

print(any(nums))  # False

57. set + all()

all(집합)

모든 값이 True면 True

# 성공: 모두 True 계열
nums = {1, 2, 3}

print(all(nums))  # True
# 성공: 하나라도 False 계열이면 False
nums = {1, 0, 3}

print(all(nums))  # False
# 주의: 빈 set은 True 반환
nums = set()

print(all(nums))  # True

58. set 중첩 사용 불가

set 안에 set 저장

일반 set은 다른 set 안에 저장 불가

# 주의: set은 mutable이라 저장 불가
data = {{1, 2}, {3, 4}}  # TypeError
# 성공: frozenset은 저장 가능
data = {
    frozenset([1, 2]),
    frozenset([3, 4])
}

print(data)

59. set 안에 tuple 저장

집합 = {(값1, 값2), (값3, 값4)}

tuple은 변경 불가능하므로 set 안에 저장 가능

# 성공: tuple 저장 가능
points = {(1, 2), (3, 4)}

print(points)  # {(1, 2), (3, 4)}
# 성공: 좌표처럼 활용 가능
points = {(0, 0), (1, 2), (3, 4)}

print((1, 2) in points)  # True
# 주의: tuple 안에 list가 있으면 저장 불가
data = {(1, [2, 3])}  # TypeError

60. set 비교 시 타입 주의

집합 == 다른자료형

set과 다른 자료형은 값이 비슷해 보여도 다름

# 성공: set끼리는 순서가 달라도 같음
a = {1, 2, 3}
b = {3, 2, 1}

print(a == b)  # True
# 주의: list와 set은 다름
a = {1, 2, 3}
b = [1, 2, 3]

print(a == b)  # False
# 주의: tuple과 set도 다름
a = {1, 2, 3}
b = (1, 2, 3)

print(a == b)  # False

61. set에서 중복 제거 후 개수 세기

len(set(반복가능한값))

중복을 제거한 값의 개수 확인

# 성공: 고유 숫자 개수
nums = [1, 1, 2, 2, 3, 4]

result = len(set(nums))

print(result)  # 4
# 성공: 문자열의 고유 문자 개수
text = "banana"

result = len(set(text))

print(result)  # 3
# 주의: 순서가 필요한 경우 set만 쓰면 안 됨
text = "banana"

print(set(text))  # {'b', 'a', 'n'}

62. set으로 공통 값 찾기

set(값1) & set(값2)

두 데이터에서 공통 값 찾기

# 성공: 두 리스트의 공통 값
a = [1, 2, 3, 4]
b = [3, 4, 5, 6]

result = set(a) & set(b)

print(result)  # {3, 4}
# 성공: 두 문자열의 공통 문자
a = "apple"
b = "banana"

result = set(a) & set(b)

print(result)  # {'a'}
# 주의: 결과 순서는 보장되지 않음
a = ["apple", "banana"]
b = ["banana", "orange"]

print(set(a) & set(b))  # {'banana'}

63. set으로 차이 찾기

set(값1) - set(값2)

첫 번째 데이터에만 있는 값 찾기

# 성공: a에만 있는 값
a = [1, 2, 3, 4]
b = [3, 4, 5, 6]

result = set(a) - set(b)

print(result)  # {1, 2}
# 성공: 문자열 차이
a = "hello"
b = "world"

result = set(a) - set(b)

print(result)
# 주의: 방향이 중요함
a = [1, 2, 3]
b = [3, 4, 5]

print(set(a) - set(b))  # {1, 2}
print(set(b) - set(a))  # {4, 5}

64. set으로 전체 고유 값 찾기

set(값1) | set(값2)

두 데이터의 전체 고유 값 찾기

# 성공: 두 리스트의 전체 고유 값
a = [1, 2, 3]
b = [3, 4, 5]

result = set(a) | set(b)

print(result)  # {1, 2, 3, 4, 5}
# 성공: 두 문자열의 전체 고유 문자
a = "ab"
b = "bc"

result = set(a) | set(b)

print(result)  # {'a', 'b', 'c'}
# 주의: 중복과 순서는 제거됨
a = [3, 3, 1]
b = [2, 2, 1]

print(set(a) | set(b))

65. set으로 한쪽에만 있는 값 찾기

set(값1) ^ set(값2)

두 데이터 중 한쪽에만 있는 값 찾기

# 성공: 한쪽에만 있는 숫자
a = [1, 2, 3]
b = [3, 4, 5]

result = set(a) ^ set(b)

print(result)  # {1, 2, 4, 5}
# 성공: 한쪽에만 있는 문자
a = "abc"
b = "bcd"

result = set(a) ^ set(b)

print(result)  # {'a', 'd'}
# 주의: 양쪽에 모두 있는 값은 제외됨
a = [1, 2, 3]
b = [2, 3, 4]

print(set(a) ^ set(b))  # {1, 4}

66. set으로 포함 여부 확인

set(작은값) <= set(큰값)

모든 값이 포함되어 있는지 확인

# 성공: 필요한 값이 모두 있음
required = ["id", "name"]
data = ["id", "name", "email"]

print(set(required) <= set(data))  # True
# 성공: 문자열 포함 여부 확인
required = "abc"
data = "abcdef"

print(set(required) <= set(data))  # True
# 주의: 중복 개수는 고려하지 않음
a = [1, 1, 1]
b = [1]

print(set(a) <= set(b))  # True

67. set으로 중복 검사

len(값) != len(set(값))

중복이 있는지 확인

# 성공: 중복 있음
nums = [1, 2, 2, 3]

if len(nums) != len(set(nums)):
    print("중복 있음")
# 성공: 중복 없음
nums = [1, 2, 3]

if len(nums) == len(set(nums)):
    print("중복 없음")
# 주의: set으로 바꿀 수 없는 값이 있으면 에러
data = [[1, 2], [1, 2]]

set(data)  # TypeError

68. set으로 빠진 값 찾기

set(기준값) - set(현재값)

기준에는 있지만 현재 값에는 없는 항목 찾기

# 성공: 빠진 값 찾기
required = {"id", "name", "email"}
current = {"id", "name"}

missing = required - current

print(missing)  # {'email'}
# 성공: 여러 개 빠진 값 찾기
required = {"id", "name", "email", "phone"}
current = {"id"}

missing = required - current

print(missing)  # {'name', 'email', 'phone'}
# 주의: 결과 순서는 보장되지 않음
required = {"id", "name", "email"}
current = {"id"}

print(required - current)

69. set으로 불필요한 값 찾기

set(현재값) - set(허용값)

현재 값 중 허용되지 않은 항목 찾기

# 성공: 불필요한 값 찾기
allowed = {"id", "name", "email"}
current = {"id", "name", "age"}

extra = current - allowed

print(extra)  # {'age'}
# 성공: 여러 개 찾기
allowed = {"id", "name"}
current = {"id", "name", "age", "phone"}

extra = current - allowed

print(extra)  # {'age', 'phone'}
# 주의: 기준 방향이 중요함
allowed = {"id", "name", "email"}
current = {"id", "age"}

print(current - allowed)  # {'age'}
print(allowed - current)  # {'name', 'email'}

70. set으로 필수값 검증

필수값집합 <= 현재값집합

필수값이 모두 포함되어 있는지 확인

# 성공: 필수값 모두 존재
required = {"id", "name"}
current = {"id", "name", "email"}

if required <= current:
    print("필수값 모두 있음")
# 성공: 필수값 누락 확인
required = {"id", "name", "email"}
current = {"id", "name"}

if not required <= current:
    print("필수값 누락")
# 주의: 값의 개수는 고려하지 않음
required = {"id", "id"}
current = {"id"}

print(required <= current)  # True

71. set으로 허용값 검증

현재값집합 <= 허용값집합

현재 값이 모두 허용된 값인지 확인

# 성공: 모두 허용된 값
allowed = {"read", "write", "delete"}
current = {"read", "write"}

if current <= allowed:
    print("허용된 권한만 있음")
# 성공: 허용되지 않은 값 확인
allowed = {"read", "write"}
current = {"read", "admin"}

if not current <= allowed:
    print("허용되지 않은 값 있음")
# 주의: 빠진 값 검사가 아니라 초과 값 검사
allowed = {"read", "write", "delete"}
current = {"read"}

print(current <= allowed)  # True

72. set으로 공통 태그 찾기

set(태그1) & set(태그2)

두 태그 목록에서 공통 태그 찾기

# 성공: 공통 태그 찾기
post1 = {"python", "backend", "api"}
post2 = {"python", "data", "api"}

common = post1 & post2

print(common)  # {'python', 'api'}
# 성공: 공통 태그가 없는 경우
post1 = {"python", "backend"}
post2 = {"frontend", "react"}

common = post1 & post2

print(common)  # set()
# 주의: 결과 순서는 보장되지 않음
post1 = {"python", "api"}
post2 = {"api", "python"}

print(post1 & post2)

73. set으로 권한 합치기

권한1 | 권한2

여러 권한을 중복 없이 합치기

# 성공: 권한 합치기
user_roles = {"read", "write"}
group_roles = {"read", "delete"}

roles = user_roles | group_roles

print(roles)  # {'read', 'write', 'delete'}
# 성공: 여러 set 합치기
a = {"read"}
b = {"write"}
c = {"delete"}

roles = a | b | c

print(roles)  # {'read', 'write', 'delete'}
# 주의: 중복 권한은 하나만 남음
user_roles = {"read", "read"}
group_roles = {"read"}

print(user_roles | group_roles)  # {'read'}

74. set으로 공통 권한 찾기

권한1 & 권한2

공통으로 가진 권한 찾기

# 성공: 공통 권한 찾기
admin = {"read", "write", "delete"}
user = {"read", "write"}

common = admin & user

print(common)  # {'read', 'write'}
# 성공: 공통 권한 없음
admin = {"delete"}
user = {"read"}

common = admin & user

print(common)  # set()
# 주의: 결과가 빈 set인지 확인할 수 있음
common = admin & user

if not common:
    print("공통 권한 없음")

75. set으로 권한 차이 찾기

기준권한 - 비교권한

기준에는 있고 비교 대상에는 없는 권한 찾기

# 성공: admin에게만 있는 권한
admin = {"read", "write", "delete"}
user = {"read"}

diff = admin - user

print(diff)  # {'write', 'delete'}
# 성공: user에게만 있는 권한
admin = {"read"}
user = {"read", "comment"}

diff = user - admin

print(diff)  # {'comment'}
# 주의: 방향에 따라 의미가 달라짐
admin = {"read", "write", "delete"}
user = {"read", "comment"}

print(admin - user)  # {'write', 'delete'}
print(user - admin)  # {'comment'}

76. set으로 권한 변경점 찾기

기존권한 ^ 새로운권한

기존 권한과 새로운 권한에서 달라진 값 찾기

# 성공: 변경된 권한 찾기
old_roles = {"read", "write"}
new_roles = {"read", "delete"}

changed = old_roles ^ new_roles

print(changed)  # {'write', 'delete'}
# 성공: 변경점이 없으면 빈 set
old_roles = {"read", "write"}
new_roles = {"read", "write"}

changed = old_roles ^ new_roles

print(changed)  # set()
# 주의: 무엇이 추가/삭제됐는지는 따로 봐야 함
old_roles = {"read", "write"}
new_roles = {"read", "delete"}

added = new_roles - old_roles
removed = old_roles - new_roles

print(added)    # {'delete'}
print(removed)  # {'write'}

77. set으로 중복 사용자 제거

set(사용자리스트)

사용자 목록에서 중복 제거

# 성공: 중복 사용자 제거
users = ["kim", "lee", "kim", "park"]

unique_users = set(users)

print(unique_users)  # {'kim', 'lee', 'park'}
# 성공: 다시 list로 변환
users = ["kim", "lee", "kim", "park"]

unique_users = list(set(users))

print(unique_users)
# 주의: 순서는 유지되지 않음
users = ["kim", "lee", "kim", "park"]

print(list(set(users)))

78. set으로 방문자 수 계산

len(set(방문자리스트))

고유 방문자 수 계산

# 성공: 고유 방문자 수
visitors = ["user1", "user2", "user1", "user3"]

count = len(set(visitors))

print(count)  # 3
# 성공: IP 기준 고유 방문자 수
ips = ["10.0.0.1", "10.0.0.2", "10.0.0.1"]

count = len(set(ips))

print(count)  # 2
# 주의: 대소문자는 다른 값으로 처리됨
users = ["Kim", "kim", "KIM"]

print(len(set(users)))  # 3

79. set으로 공통 사용자 찾기

set(그룹1) & set(그룹2)

두 그룹에 모두 있는 사용자 찾기

# 성공: 공통 사용자 찾기
group_a = ["kim", "lee", "park"]
group_b = ["lee", "choi", "kim"]

common = set(group_a) & set(group_b)

print(common)  # {'kim', 'lee'}
# 성공: 공통 사용자가 없으면 빈 set
group_a = ["kim", "lee"]
group_b = ["park", "choi"]

common = set(group_a) & set(group_b)

print(common)  # set()
# 주의: 결과 순서는 보장되지 않음
group_a = ["kim", "lee", "park"]
group_b = ["lee", "kim"]

print(set(group_a) & set(group_b))

80. set으로 탈퇴 사용자 찾기

set(이전사용자) - set(현재사용자)

이전에는 있었지만 현재는 없는 사용자 찾기

# 성공: 탈퇴 사용자 찾기
old_users = ["kim", "lee", "park"]
current_users = ["kim", "park"]

left_users = set(old_users) - set(current_users)

print(left_users)  # {'lee'}
# 성공: 탈퇴 사용자가 없으면 빈 set
old_users = ["kim", "lee"]
current_users = ["kim", "lee"]

left_users = set(old_users) - set(current_users)

print(left_users)  # set()
# 주의: 방향이 반대면 신규 사용자가 됨
old_users = ["kim", "lee"]
current_users = ["kim", "lee", "park"]

print(set(old_users) - set(current_users))      # set()
print(set(current_users) - set(old_users))      # {'park'}

81. set으로 신규 사용자 찾기

set(현재사용자) - set(이전사용자)

현재는 있지만 이전에는 없던 사용자 찾기

# 성공: 신규 사용자 찾기
old_users = ["kim", "lee"]
current_users = ["kim", "lee", "park"]

new_users = set(current_users) - set(old_users)

print(new_users)  # {'park'}
# 성공: 신규 사용자가 없으면 빈 set
old_users = ["kim", "lee"]
current_users = ["kim", "lee"]

new_users = set(current_users) - set(old_users)

print(new_users)  # set()
# 주의: 탈퇴 사용자와 방향이 반대
old_users = ["kim", "lee", "park"]
current_users = ["kim", "lee"]

print(set(current_users) - set(old_users))  # set()
print(set(old_users) - set(current_users))  # {'park'}

82. set으로 사용자 변경점 찾기

set(이전사용자) ^ set(현재사용자)

신규 사용자와 탈퇴 사용자를 함께 찾기

# 성공: 변경된 사용자 찾기
old_users = ["kim", "lee", "park"]
current_users = ["kim", "choi", "park"]

changed = set(old_users) ^ set(current_users)

print(changed)  # {'lee', 'choi'}
# 성공: 변경점 없으면 빈 set
old_users = ["kim", "lee"]
current_users = ["kim", "lee"]

changed = set(old_users) ^ set(current_users)

print(changed)  # set()
# 주의: 신규/탈퇴를 구분하려면 따로 계산
old_users = ["kim", "lee", "park"]
current_users = ["kim", "choi", "park"]

new_users = set(current_users) - set(old_users)
left_users = set(old_users) - set(current_users)

print(new_users)   # {'choi'}
print(left_users)  # {'lee'}

83. set으로 공통 상품 찾기

set(상품목록1) & set(상품목록2)

두 상품 목록에 모두 있는 상품 찾기

# 성공: 공통 상품 찾기
store_a = ["keyboard", "mouse", "monitor"]
store_b = ["mouse", "speaker", "monitor"]

common = set(store_a) & set(store_b)

print(common)  # {'mouse', 'monitor'}
# 성공: 공통 상품이 없으면 빈 set
store_a = ["keyboard", "mouse"]
store_b = ["speaker", "monitor"]

common = set(store_a) & set(store_b)

print(common)  # set()
# 주의: 결과 순서는 보장되지 않음
print(set(store_a) & set(store_b))

84. set으로 품절 상품 찾기

set(이전상품) - set(현재상품)

이전에는 있었지만 현재는 없는 상품 찾기

# 성공: 품절 상품 찾기
old_items = ["keyboard", "mouse", "monitor"]
current_items = ["keyboard", "mouse"]

sold_out = set(old_items) - set(current_items)

print(sold_out)  # {'monitor'}
# 성공: 품절 상품이 없으면 빈 set
old_items = ["keyboard", "mouse"]
current_items = ["keyboard", "mouse"]

sold_out = set(old_items) - set(current_items)

print(sold_out)  # set()
# 주의: 방향이 반대면 신규 상품이 됨
print(set(current_items) - set(old_items))

85. set으로 신규 상품 찾기

set(현재상품) - set(이전상품)

현재는 있지만 이전에는 없던 상품 찾기

# 성공: 신규 상품 찾기
old_items = ["keyboard", "mouse"]
current_items = ["keyboard", "mouse", "monitor"]

new_items = set(current_items) - set(old_items)

print(new_items)  # {'monitor'}
# 성공: 신규 상품이 없으면 빈 set
old_items = ["keyboard", "mouse"]
current_items = ["keyboard", "mouse"]

new_items = set(current_items) - set(old_items)

print(new_items)  # set()
# 주의: 품절 상품과 방향이 반대
print(set(old_items) - set(current_items))

86. set으로 상품 변경점 찾기

set(이전상품) ^ set(현재상품)

신규 상품과 품절 상품을 함께 찾기

# 성공: 변경된 상품 찾기
old_items = ["keyboard", "mouse", "monitor"]
current_items = ["keyboard", "speaker", "monitor"]

changed = set(old_items) ^ set(current_items)

print(changed)  # {'mouse', 'speaker'}
# 성공: 변경점이 없으면 빈 set
old_items = ["keyboard", "mouse"]
current_items = ["keyboard", "mouse"]

changed = set(old_items) ^ set(current_items)

print(changed)  # set()
# 주의: 신규/품절을 구분하려면 따로 계산
new_items = set(current_items) - set(old_items)
sold_out = set(old_items) - set(current_items)

print(new_items)  # {'speaker'}
print(sold_out)   # {'mouse'}

87. set으로 금지어 검사

set(문장단어) & set(금지어)

문장에 금지어가 포함되어 있는지 확인

# 성공: 금지어 포함 여부 확인
words = ["hello", "bad", "python"]
banned = {"bad", "spam"}

found = set(words) & banned

print(found)  # {'bad'}
# 성공: 금지어가 없으면 빈 set
words = ["hello", "python"]
banned = {"bad", "spam"}

found = set(words) & banned

print(found)  # set()
# 주의: 대소문자는 다른 값으로 처리됨
words = ["Bad"]
banned = {"bad"}

print(set(words) & banned)  # set()

88. set으로 허용 단어 검사

set(문장단어) <= set(허용단어)

문장의 모든 단어가 허용된 단어인지 확인

# 성공: 모두 허용된 단어
words = ["hello", "python"]
allowed = {"hello", "python", "study"}

print(set(words) <= allowed)  # True
# 성공: 허용되지 않은 단어 있음
words = ["hello", "bad"]
allowed = {"hello", "python"}

print(set(words) <= allowed)  # False
# 주의: 어떤 단어가 문제인지 보려면 차집합 사용
invalid = set(words) - allowed

print(invalid)  # {'bad'}

89. set으로 공통 관심사 찾기

set(관심사1) & set(관심사2)

두 사람의 공통 관심사 찾기

# 성공: 공통 관심사 찾기
user_a = ["python", "movie", "music"]
user_b = ["java", "music", "python"]

common = set(user_a) & set(user_b)

print(common)  # {'python', 'music'}
# 성공: 공통 관심사가 없으면 빈 set
user_a = ["python", "movie"]
user_b = ["java", "game"]

common = set(user_a) & set(user_b)

print(common)  # set()
# 주의: 결과 순서는 보장되지 않음
print(set(user_a) & set(user_b))

90. set으로 추천 후보 찾기

set(상대방목록) - set(내목록)

상대방에게는 있지만 나에게는 없는 항목 찾기

# 성공: 추천 후보 찾기
my_movies = ["A", "B"]
friend_movies = ["A", "B", "C", "D"]

recommend = set(friend_movies) - set(my_movies)

print(recommend)  # {'C', 'D'}
# 성공: 추천 후보가 없으면 빈 set
my_movies = ["A", "B"]
friend_movies = ["A", "B"]

recommend = set(friend_movies) - set(my_movies)

print(recommend)  # set()
# 주의: 방향이 바뀌면 내가 가진 것 중 상대가 없는 항목
print(set(my_movies) - set(friend_movies))

'🐍Python' 카테고리의 다른 글

Python Basic: dict  (0) 2026.05.28
Python Basic: tuple  (0) 2026.05.28
Python Basic: list  (0) 2026.05.28
Python Basic: String  (0) 2026.05.28
'🐍Python' 카테고리의 다른 글
  • Python Basic: dict
  • Python Basic: tuple
  • Python Basic: list
  • Python Basic: String
limdaeil
limdaeil
limdaeil 님의 블로그 입니다.
  • limdaeil
    limdaeil
    limdaeil
  • 전체
    오늘
    어제
    • 분류 전체보기 (50) N
      • 💭Retrospective (16)
      • 🐬MySQL (1)
      • 🐍Python (5)
      • 🍃SpringBoot (14) N
      • ♾️Devops (1)
      • 🌎Network (2)
      • 📚Read & 👨‍🏫Course (10)
      • 🥕Fortinet (0)
      • Programmers (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    MySQL
    Concurrency
    이것이 스프링 AI다
    gradle
    jwt
    맛있는 디자인 피그마 With AI
    redis
    HttpMessageConverter
    spring boot
    서평단
    레이스 컨디션
    회고
    클린 아키텍처 with 파이썬
    optimistic rock
    Python
    distributed lock
    한빛아카데미
    나는리뷰어다
    한빛미디어
    mcp
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
limdaeil
Python Basic: set
상단으로

티스토리툴바