English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 문서에서는 파이썬 집합에 대해 모든 것을 배울 것입니다; 어떻게 생성하며, 요소를 추가하거나 제거하는 방법, 그리고 파이썬에서 집합에 대해 수행할 수 있는 모든 작업에 대해 배울 것입니다.
집합은 요소의 비정렬 집합입니다. 각 요소는 유일해야 하며(중복이 없어야 합니다) 변경할 수 없어야 합니다.
하지만, 집합 자체는 변경 가능합니다. 우리는 그 안에 요소를 추가하거나 제거할 수 있습니다.
집합은 합집합, 교집합, 대칭 차집합과 같은 수학 집합 연산을 수행할 수 있습니다.
모든 요소(요소)를 대괄호{}에 넣고 콤마로 구분하거나 내장 함수를 사용하여 집합 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))
집합은 변경 가능합니다. 하지만 무질서이기 때문에 인덱스는 의미가 없습니다.
집합의 요소에 접근하거나 변경할 수 있는 인덱싱이나 슬라이싱을 사용할 수 없습니다. 집합은 이를 지원하지 않습니다.
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)
집합은 합집합, 교집합, 차집합 및 대칭 차집합과 같은 수학 집합 연산을 수행할 수 있습니다. 연산자나 메서드를 통해 이를 수행할 수 있습니다...
다음과 같은 두 집합을 사용하여 다음 작업을 고려해 보겠습니다.
>>> 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}
A과B의교집합은 이 두 집합에서 공통된 요소 집합입니다.
교점은 & 연산자를 사용하여 수행됩니다. 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}
위에 사용된 몇 가지 메서드 중 일부를 포함하여 집합 메서드가 많습니다. 이 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() | 집합 중 모든 요소의 합을 반환합니다. |
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' 속성이 없습니다