Python

파이썬에서 집합과 집합 관련 함수를 다뤄보자

총알 2024. 6. 13. 20:55
728x90

파이썬에서는 집합 형태의 자료형을 선언해서 사용할 수 있다.

집합의 특징은 2가지가 있다.

  • 중복해서 선언할 수 없다.
  • 순서를 정할 수 없다.
그럼 이해를 돕기 위해 바로 집합의 선언 방법과 출력결과를 알아보도록 하자.
group1 = set([13, 1, 5])
group2 = set(['13', '1', '5', '1'])
group3 = set("apple")

print("group1 : %s" %group1)
print("group2 : %s" %group2)
print("group3 : %s" %group3)

################출력 결과################
group1 : {1, 5, 13}
group2 : {'1', '13', '5'}
group3 : {'p', 'l', 'a', 'e'}

그룹은 set으로 선언할 수 있는데

숫자를 리스트 형태로 집합으로 만들거나

문자 단위로 선언하거나

문자열 형태로 선언할 수 있다.

 

그런데 출력 결과를 보면 매우 이상하다는 것을 볼 수 있다.

숫자 형태로 선언하였을 경우에는 오름차순으로 정렬이 되지만

문자 단위나 문자열로 집합을 만들경우에는 순서가 뒤죽박죽인 것을 볼 수 있다.

나중에 확인한 건데 숫자의 경우도 집합에 따라서 순서가 뒤죽박죽이었다.

 

이는 앞서 설명한 순서를 정할 수 없다는 특성 때문이다.

문자열이나 문자의 경우에는 선언할 때마다 순서가 계속 바뀌는 것을 확인할 수 있다.

 

추가로 집합에서는 순서라는 개념이 없기 때문에 특정 인덱스의 값을 추출하려면 리스트나 튜플형태로 다시 선언한 후에 출력해야 한다. 예제는 아래를 참고하자.

group1 = set([13, 1, 5])
group3 = set("apple")
list_1 = list(group1)
tuple_1 = tuple(group3)

print("list_1 : %s" %list_1)
print("list_1[2] : %s" %list_1[2])
print("tuple_1 : ", tuple_1)
print("tuple_1[1] : %s" %tuple_1[1])

################출력 결과################
list_1 : [1, 5, 13]
list_1[2] : 13
tuple_1 :  ('p', 'e', 'a', 'l')
tuple_1[1] : e
그럼 이어서 집합 자료형으로 무엇을 할 수 있는지 확인해 보자.
교집합 구하기
group1 = set([1, 1, 9, 'h', 'e', 'l', 'p'])
group2 = set([1, 1, 2, 'h', 'e', 'l', 'p'])
group3 = group1&group2

print("교집합 : %s" %group3)

################출력 결과################
교집합 : {1, 'e', 'h', 'p', 'l'}

교집합의 경우 겹치는 것에 대한 것은 하나만 출력되는 것을 볼 수 있다.

 

차집합 구하기
group1 = set([1, 1, 9, 'h', 'e', 'l', 'p'])
group2 = set([1, 1, 2, 'h', 'e', 'l', 'p'])
group3 = group1 - group2
group4 = group2 - group1

print("차집합_1 : %s" %group3)
print("차집합_2 : %s" %group4)

################출력 결과################
차집합_1 : {9}
차집합_2 : {2}

차집합의 경우 계산결과를 보면 겹치는 것만 빠지는 것을 볼 수 있다.

 

다음으로 집합 관련 함수들을 알아보자.
집합.add(x)
group = set([1, 1, 9, 'h', 'e', 'l'])
group.add('p')

print("group : %s" %group)

################출력 결과################
group : {1, 'p', 9, 'e', 'h', 'l'}

집합에 하나의 데이터만 추가 가능하고 출력했을 때는 순서는 랜덤하게 출력된다.

집합.update(리스트)
group = set([1, 1, 9])
add_group = set('help')
group.update(add_group)

print("group : %s" %group)
################출력 결과################
group : {'p', 1, 'h', 'e', 9, 'l'}

집합에 문자열의 데이터 모두 추가되고 출력했을 때는 순서는 랜덤하게 출력된다.

집합.remove(x)
group = set([11, 6, 7, 1, 1])
group.remove(1)

print("group : %s" %group)

################출력 결과################
group : {11, 6, 7}

 

728x90