English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

파이썬 기본 튜토리얼

파이썬 흐름 제어

Python 함수

Python 데이터 타입

파이썬 파일 작업

파이썬 객체와 클래스

파이썬 날짜와 시간

파이썬 고급 지식

파이썬 참조 매뉴얼

Python 집합(Set)

이 문서에서는 파이썬 집합에 대해 모든 것을 배울 것입니다; 어떻게 생성하며, 요소를 추가하거나 제거하는 방법, 그리고 파이썬에서 집합에 대해 수행할 수 있는 모든 작업에 대해 배울 것입니다.

파이썬에서의 집합은 무엇인가요?

집합은 요소의 비정렬 집합입니다. 각 요소는 유일해야 하며(중복이 없어야 합니다) 변경할 수 없어야 합니다.

하지만, 집합 자체는 변경 가능합니다. 우리는 그 안에 요소를 추가하거나 제거할 수 있습니다.

집합은 합집합, 교집합, 대칭 차집합과 같은 수학 집합 연산을 수행할 수 있습니다.

집합을 어떻게 생성하나요?

모든 요소(요소)를 대괄호{}에 넣고 콤마로 구분하거나 내장 함수를 사용하여 집합 set()를 생성합니다.

이 수의 항목을 가질 수 있으며, 이들은 다른 타입(정수, 실수, 튜플, 문자열 등)을 가질 수 있습니다. 하지만 집합은 변경 가능한 요소(예를 들어}}리스트,집합 또는,

# 정수 집합
my_set = {1, 2, 3}
print(my_set)
# 혼합 데이터 타입 집합
my_set = {1.0, "Hello", (1, 2, 3)}
print(my_set)

다음 예제도 시도해 보세요.

# 중복 없는 집합
# 출력: {1, 2, 3, 4}
my_set = {1,2,3,4,3,2}
print(my_set)
#set은 변경 가능한 항목을 포함할 수 없습니다
#여기[3,4]는 변경 가능한 리스트입니다
#빠른 주석을 해제하면12줄
# 에러가 발생합니다.
# TypeError: unhashable type: 'list'
#my_set = {1, 2, [3, 4])}
# 리스트에서 집합을 생성할 수 있습니다
# 출력: {1, 2, 3}
my_set = set([1,2,3,2])
print(my_set)

비어 있는 집합을 생성하는 것은 약간 특별합니다.

비어 있는 괄호{}는 Python에서 비어 있는 딕셔너리를 생성합니다. 비어 있는 요소가 없는 집합을 만들기 위해 set() 함수를 사용합니다.

# {}를 사용하여 초기화
a = {}
# a의 데이터 타입을 확인
# 출력: <class 'dict'>
print(type(a))
# set()를 사용하여 초기화
a = set()
# a의 데이터 타입을 확인
# 출력: <class 'set'>
print(type(a))

Python에서 집합을 어떻게 변경하나요?

집합은 변경 가능합니다. 하지만 무질서이기 때문에 인덱스는 의미가 없습니다.

집합의 요소에 접근하거나 변경할 수 있는 인덱싱이나 슬라이싱을 사용할 수 없습니다. 집합은 이를 지원하지 않습니다.

add() 메서드를 사용하여 단일 요소를 추가하고, update() 메서드를 사용하여 여러 요소를 추가할 수 있습니다. update() 메서드는 다음과 같이 사용할 수 있습니다:특정,리스트,문자열또는 다른 집합을 매개변수로 사용하면 모든 경우에 중복을 피해야 합니다.

# my_set 초기화
my_set = {1,3}
print(my_set)
# 빠른 주석을 해제하면9줄
# 에러를 받게 됩니다
# TypeError: 'set' object does not support indexing
#my_set[0]
# 하나의 요소를 추가
# 출력: {1, 2, 3}
my_set.add(2)
print(my_set)
# 여러 요소를 추가
# 출력: {1, 2, 3, 4}
my_set.update([2,3,4])
print(my_set)
# 리스트와 집합을 추가
# 출력: {1, 2, 3, 4, 5, 6, 8}
my_set.update([4,5], {1,6,8)
print(my_set)

프로그램을 실행할 때, 출력은 다음과 같습니다:

{1, 3}
{1, 2, 3}
{1, 2, 3, 4}
{1, 2, 3, 4, 5, 6, 8}

집합에서 요소를 어떻게 제거하나요?

discard()와 remove() 메서드를 사용하여 집합에서 특정 요소를 제거할 수 있습니다.

discard()를 사용하면 집합에 요소가 없더라도 변하지 않지만, remove()는 이 경우에 오류를 발생시킵니다.

이 예제에서 이 점을 설명할 것입니다.

# my_set 초기화
my_set = {1, 3, 4, 5, 6}
print(my_set)
# 요소 버리기
# 출력: {1, 3, 5, 6}
my_set.discard(4)
print(my_set)
# 제거된 요소
# 출력: {1, 3, 5}
my_set.remove(6)
print(my_set)
# 요소 버리기
# my_set에 없는
# 출력: {1, 3, 5}
my_set.discard(2)
print(my_set)
# remove 어떤 요소
# my_set에 없는
# #my_set.remove(2),
# 오류가 발생합니다.
# Output: KeyError: 2
#my_set.remove(2)

또한 pop() 메서드를 사용하여 항목을 제거하고 반환할 수 있습니다.

집합은 비정렬이며, 제거될 항목을 결정할 수 없습니다. 이는 완전히 무작위입니다.

또한 clear() 메서드를 사용하여 집합에서 모든 항목을 제거할 수 있습니다.

# my_set 초기화
# Output: 유일 요소 집합
my_set = set("HelloWorld")
print(my_set)
# pop 하나의 요소
# Output: 랜덤 요소
print(my_set.pop())
# pop 어떤 요소
# Output: 랜덤 요소
my_set.pop()
print(my_set)
# my_set을 비우기
# Output: set()
my_set.clear()
print(my_set)

Python 집합 연산

집합은 합집합, 교집합, 차집합 및 대칭 차집합과 같은 수학 집합 연산을 수행할 수 있습니다. 연산자나 메서드를 통해 이를 수행할 수 있습니다...

다음과 같은 두 집합을 사용하여 다음 작업을 고려해 보겠습니다.

>>> A = {1, 2, 3, 4, 5}
>>> B = {4, 5, 6, 7, 8}

집합 합집합

A와 B의 합집합은 이 두 집합에서 모든 요소의 집합입니다.

합집합은 | 연산자를 사용하여 수행됩니다. 또한 union() 메서드를 통해 동일한 작업을 수행할 수 있습니다.

# 초기화 A와 B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
# | 연산자 사용
# 출력: {1, 2, 3, 4, 5, 6, 7, 8}
print(A | B)

Python shell에서 다음 예제를 시도해 보세요.

# union 함수 사용
>>> A.union(B)
{1, 2, 3, 4, 5, 6, 7, 8}
# B에서 합집합 함수 사용
>>> B.union(A)
{1, 2, 3, 4, 5, 6, 7, 8}

집합 교집합

AB의교집합은 이 두 집합에서 공통된 요소 집합입니다.

교점은 & 연산자를 사용하여 수행됩니다. intersection() 메서드를 통해 동일한 작업을 수행할 수 있습니다.

# 초기화 A와 B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
# & 연산자 사용
# Output: {4, 5}
print(A & B)

Python shell에서 다음 예제를 시도해 보세요.

# A에서 교집합 함수 사용
>>> A.intersection(B)
{4, 5}
# B에서 교집합 함수 사용
>>> B.intersection(A)
{4, 5}

집합 차집합

A와 B의 차집합(A-B)은 A에만 있지만 B에 없는 요소 집합입니다. 비슷하게, B-A는 B에 있지만 A에 없는 요소 집합입니다.

차이는 사용 -연산자가 수행되는 것을 사용하여 difference() 메서드를 통해 동일한 작업을 수행할 수 있습니다.

# 초기화 A와 B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
# A에서 사용 - 연산자
# Output: {1, 2, 3}
print(A - B)

Python shell에서 다음 예제를 시도해 보세요.

# A에서 사용하는 차이 함수
>>> A.difference(B)
{1, 2, 3}
# B에서 사용-대칭 차이를 계산합니다
>>> B - A
{8, 6, 7}
# B에 차집합 함수 사용
>>> B.difference(A)
{8, 6, 7}

집합 대칭 차이

A와 B의 대칭 차이는 A와 B에서의 요소를 포함하되, 두 집합에서의 요소가 동일하지 않은 그룹입니다.

대칭 차이는 A와 B에서의 요소를 사용하여 ^ 연산자로 실행됩니다. symmetric_difference() 메서드를 사용하여 동일한 작업을 수행할 수 있습니다.

# 초기화 A와 B
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
# ^ 연산자 사용
# 출력: {1, 2, 3, 6, 7, 8}
print(A ^ B)

Python shell에서 다음 예제를 시도해 보세요.

# A에 symmetric_difference 함수 사용
>>> A.symmetric_difference(B)
{1, 2, 3, 6, 7, 8}
# B에 symmetric_difference 함수 사용
>>> B.symmetric_difference(A)
{1, 2, 3, 6, 7, 8}

다른 Python 집합 메서드

위에 사용된 몇 가지 메서드 중 일부를 포함하여 집합 메서드가 많습니다. 이 set 객체가 사용할 수 있는 모든 메서드 목록입니다.

Python Set 메서드
메서드설명
add()요소를 집합에 추가합니다
clear()집합에서 모든 요소를 제거합니다
copy()집합의 복사본을 반환합니다
difference()두 개나 많은 집합의 차집합을 새로운 집합으로 반환합니다
difference_update()이 집합에서 다른 집합의 모든 요소를 제거합니다
discard()요소가 멤버면 집합에서 요소를 제거합니다. (요소가 집합에 없으면 어떤 작업도 수행하지 않습니다)
intersection()두 집합의 교집합을 새로운 집합으로 반환합니다
intersection_update()본신과 다른 요소의 교집합으로 집합을 업데이트합니다
isdisjoint()두 집합의 교집합이 비어 있으면 True를 반환합니다 
issubset()다른 집합이 이 집합을 포함하는지 True를 반환합니다
issuperset()이 집합이 다른 집합을 포함하는지 True를 반환합니다
pop()랜덤한 set 요소를 제거하고 반환합니다. 집합이 비어 있으면 KeyError를 증가시킵니다
remove()집합에서 요소를 제거합니다. 요소가 멤버가 아니면 KeyError가 발생합니다
symmetric_difference()두 집합의 대칭 차이를 새로운 집합으로 반환합니다
symmetric_difference_update()본신과 다른 요소의 대칭 차이로 집합을 업데이트합니다
union()새로운 집합에서 집합의 합집합을 반환합니다
update()본신과 다른 요소의 합집합으로 집합을 업데이트합니다

기타 집합 연산

집합 구성원资格 테스트

in 키워드를 사용하여 항목이 집합에 존재하는지 확인할 수 있습니다.

# my_set 초기화
my_set = set("apple")
# 'a'가 존재하는지 확인
# 출력: True
print('a' in my_set)
# 'p'가 존재하는지 확인
# 출력: False
print('p' not in my_set)

집합 순회

for 루프를 사용하여 집합의 각 항목을 순회할 수 있습니다.

>>> for letter in set("apple"):
...    print(letter)
...    
a
p
e
l

집합과 내장 함수

all(), any(), enumerate(), len(), max(), min(), sort(), sum()와 같은 내장 함수는 set과 함께 다양한 작업을 수행하는 데 자주 사용됩니다.

내장 기능
기능설명
all()

집합의 모든 요소가 true라면 True를 반환합니다. 또는 집합이 비어 있을 때도 True를 반환합니다.

any()

집합의 어떤 요소가 true라면 True를 반환합니다. 집합이 비어 있으면 False를 반환합니다.

enumerate()모든 항목의 인덱스와 값을 포함한 이넘블 객체를 반환합니다.
len()집합의 길이(항목 수)를 반환합니다.
max()집합에서 가장 큰 항목을 반환합니다.
min()집합에서 가장 작은 항목을 반환합니다.
sorted()집합의 요소에서 새로운 정렬된 목록을 반환합니다. 집합 자체는 정렬되지 않습니다.
sum()집합 중 모든 요소의 합을 반환합니다.

Python Frozenset

Frozenset은 집합 특성을 가진 새로운 클래스이지만, 할당된 후에는 요소를 변경할 수 없습니다. 튜플은 불변 리스트이고,冻结집합은 불변 집합입니다.

변하지 않는 집합은 해시화되지 않으므로 딕셔너리 키로 사용할 수 없습니다. 반면에 frozenset은 해시화될 수 있으며 딕셔너리의 키로 사용할 수 있습니다.

함수를 사용할 수 있습니다Frozenset()생성Frozensets.

이 데이터 타입은 copy(), difference(), intersection(), isdisjoint(), issubset(), issuperset(), symmetric_difference(), union()와 같은 메서드를 지원합니다. 불변이므로 요소 추가 또는 제거 메서드가 없습니다.

# 초기화 A와 B
A = frozenset([1, 2, 3, 4])
B = frozenset([3, 4, 5, 6])

이 예제를 Python shell에서 시도해 보세요。

>>> A.isdisjoint(B)
False
>>> A.difference(B)
frozenset({1, 2)
>>> A | B
frozenset({1, 2, 3, 4, 5, 6)
>>> A.add(3)
...
AttributeError: 'frozenset' 객체에 'add' 속성이 없습니다