본문 바로가기
Programing/Python

Python Set: 집합 자료형 사용방법

by 멍멍돌이야 2023. 3. 10.
반응형

이 튜토리얼에서는 Python Set 유형과 효과적으로 사용하는 방법에 대해 배웁니다.

 

1. Python Set 유형 소개

Python 세트는 불변 요소의 정렬되지 않은 목록입니다. 

 

Set의 요소는 순서가 없습니다.

  • Set(집합)의 요소는 고유합니다. 중복 요소를 허용하지 않습니다.
  • Set의 요소는 변경할 수 없습니다. 예를 들어 숫자, 문자열 및 튜플일 수 있지만 목록이나 사전일 수는 없습니다.

 

Python에서 집합을 정의하려면 중괄호 {}를 사용합니다. 

예를 들면 다음과 같습니다.

skills = {'Python programming','Databases', 'Software design'}

사전도 중괄호를 사용하지만 해당 요소는 키-값 쌍입니다.

빈 Set(집합)을 정의하려면 다음과 같이 중괄호를 사용할 수 없습니다.

empty_set = {}

...빈 사전을 정의하기 때문입니다.

따라서 내장된 set() 함수를 사용해야 합니다.

empty_set  = set()

빈 집합은 부울 컨텍스트에서 False로 평가됩니다. 

 

예를 들면 다음과 같습니다.

skills = set()

if not skills:
    print('Empty sets are falsy')

Output:

Empty sets are falsy

실제로 set() 함수에 iterable을 전달하여 집합을 만들 수 있습니다. 

예를 들어 다음과 같이 반복 가능한 목록을 set() 함수에 전달할 수 있습니다.

skills = set(['Problem solving','Critical Thinking'])
print(skills)

Output:

{'Critical Thinking', 'Problem solving'}

요소의 원래 순서가 유지되지 않을 수 있습니다.

iterable에 중복 요소가 있으면 set() 함수가 해당 요소를 제거합니다. 

예를 들면 다음과 같습니다.

characters = set('letter')
print(characters)

Output:

{'r', 'l', 't', 'e'}

이 예에서 문자열 'letter'에는 두 개의 e 및 t 문자가 있으며 set()은 이들을 각각 제거합니다.

 

2. Set(집합)의 크기 가져오기

세트의 요소 수를 얻으려면 내장된 len() 함수를 사용합니다.

len(set)

 

For example:

ratings = {1, 2, 3, 4, 5}
size = len(ratings)

print(size)

 

Output:

5

 

3. Set(집합) 안에 요소(element)가 있는지 체크방법

Set(집합)에 요소가 포함되어 있는지 확인하려면 in 연산자를 사용합니다.

element in set

Set()에 요소가 포함되어 있으면 in 연산자는 True를 반환합니다.

그렇지 않으면 False를 반환합니다.

 

사용예:

ratings = {1, 2, 3, 4, 5}
rating = 1

if rating in ratings:
    print(f'The set contains {rating}')

Output:

The set contains 1

in 연산자를 부정하려면 not 연산자를 사용합니다. 

 

사용예:

ratings = {1, 2, 3, 4, 5}
rating = 6

if rating not in ratings:
    print(f'The set does not contain {rating}')

Output:

The set does not contain 6

 

4. Set(집합)에 요소(elements) 추가하기

Set()에 요소를 추가하려면 add() 메서드를 사용합니다.

set.add(element)

For example:

skills = {'Python programming', 'Software design'}
skills.add('Problem solving')

print(skills)

Output:

{'Problem solving', 'Software design', 'Python programming'}

 

5. Set(집합)에 요소(elements) 삭제하기

Set()에서 요소를 제거하려면 remove() 메서드를 사용합니다.

set.remove(element)

For example:

skills = {'Problem solving', 'Software design', 'Python programming'}
skills.remove('Software design')

print(skills)

Output:

{'Problem solving', 'Python programming'}

세트에 존재하지 않는 요소를 제거하면 오류(KeyError)가 발생합니다. 

 

사용예:

skills = {'Problem solving', 'Software design', 'Python programming'}
skills.remove('Java')

Error:

KeyError: 'Java'

오류를 방지하려면 in 연산자를 사용하여 요소를 제거하기 전에 세트에 있는지 확인해야 합니다.

skills = {'Problem solving', 'Software design', 'Python programming'}
if 'Java' in skills:
    skills.remove('Java')

보다 편리하게 하기 위해 집합에는 요소를 제거할 수 있는 discard() 메서드가 있습니다. 요소가 목록에 없으면 오류가 발생하지 않습니다.

set.discard(element)

For example:

skills = {'Problem solving', 'Software design', 'Python programming'}
skills.discard('Java')

 

6. Set(집합)에 요소(elements) 반환(Return) 하기

집합에서 요소를 제거하고 반환하려면 pop() 메서드를 사용합니다.

집합의 요소에는 특정 순서가 없으므로 pop() 메서드는 집합에서 지정되지 않은 요소를 제거합니다.

다음 코드를 여러 번 실행하면 매번 다른 값이 표시됩니다.

skills = {'Problem solving', 'Software design', 'Python programming'}
skill = skills.pop()

print(skill)

 

7. Set(집합)에서 요소(elements) 전체 삭제하기

집합에서 모든 요소를 제거하려면 clear() 메서드를 사용합니다.

set.clear()

For example:

skills = {'Problem solving', 'Software design', 'Python programming'}
skills.clear()

print(skills)

Output:

set()

 

8. frozenset 사용방법

집합을 불변으로 만들려면 frozenset()이라는 내장 함수를 사용합니다. frozenset()은 기존 세트에서 새로운 불변 세트를 반환합니다. 예를 들어:

skills = {'Problem solving', 'Software design', 'Python programming'}
skills = frozenset(skills)

그런 다음 집합의 요소를 수정하려고 하면 오류가 발생합니다.

skills.add('Django')

Error:

AttributeError: 'frozenset' object has no attribute 'add'

 

9. set elements 반복처리방법

집합은 반복 가능하므로 for 루프를 사용하여 해당 요소를 반복할 수 있습니다. 예를 들어:

skills = {'Problem solving', 'Software design', 'Python programming'}

for skill in skills:
    print(skill)

Output:

Software design
Python programming
Problem solving

루프 내 현재 요소의 인덱스에 액세스하려면 내장된 enumerate() 함수를 사용할 수 있습니다.

skills = {'Problem solving', 'Software design', 'Python programming'}

for index, skill in enumerate(skills):
    print(f"{index}.{skill}")

Output:

0.Software design
1.Python programming
2.Problem solving

기본적으로 인덱스는 0에서 시작합니다. 이를 변경하려면 enumerate() 함수의 두 번째 인수에 시작 값을 전달합니다. 예를 들어:

skills = {'Problem solving', 'Software design', 'Python programming'}

for index, skill in enumerate(skills, 1):
    print(f"{index}.{skill}")

Output:

1.Python programming
2.Problem solving
3.Software design

코드를 실행할 때마다 다른 순서로 설정된 요소를 얻게 됩니다.


10. Summary

집합은 불변 요소의 정렬되지 않은 모음입니다.

 

 

refreance:https://www.pythontutorial.net/python-basics/python-set/
728x90
반응형

댓글