본문 바로가기
프로그래밍 언어/Python

[python] 파이썬 세트 (set)

by 까망 하르방 2021. 8. 18.
반응형

set

- 세트(Set)는 중복되지 않은 항목들이 모인 것으로 순서도 없다.(Unordered)

   순서가 없기 때문에 인덱싱(indexing)이 없다. 인덱싱이 없다.

- 딕셔러니와 마찬가지로 중괄호 {} 사용

- 중괄호를 사용하는 것은 dictionary와 비슷하지만,

   키key가 없이 값만 존재한다.

- 집합 연산이 가능하다.

A = set( ["H", "S", "W", "S", "S"] )
print(A)

numbers = {2, 1 ,3, 3, 1, 2, 4}
print(numbers)

 

set 관련 함수

- add()기존 값에 추가 (중복된 값은 무시)

- update()기존 값 + 새로운 값으로 중복없이 구성

                   값을 변경하기 보다는 여러 데이터를 추가할 때 사용

remove(): 해당하는 원소를 제거하고 없으면 KeyError 발생 

- discard()해당하는 원소를 제거하며, 값이 없어도 에러 발생 X

- clear()집합 초기화

numbers = {2, 1, 3}; print(numbers)

numbers.add(4); numbers.add(1); print(numbers)
numbers.discard(5); print(numbers)
numbers.update([2, 7, 6]); print(numbers)
numbers.clear(); print(numbers)

 

set(집합)의 복사

s = {1, 3, 5}
t = s.copy()

print(t)
print(id(s), id(t))

set 내부 원소는 불변이기 때문에

굳이 얕은 복사 / 깊은 복사 구분할 필요가 없지만

copy() 동작은 얕은 복사에 해당합니다.

 

집합 연산과 함수(메소드)

- A.issubset(B): 부분집합

A.union(B): 합집합 A | B

A.intersection(B): 교집합 A & B

- A.difference(B): 차집합 A - B

- A.symmetric_difference(B)대칭차집합 (합집합 - 교집합) A ^ B 

|=, &=, -=, ^= : = 과 조합함으로써 연산과 동시에 할당

s1 = {1, 2, 7}
s2 = {1, 2, 4, 5}
s3 = {2, 4, 5, 6}
l = [1,2,4,5]

print(s1 | set(l),  s1.union(l))
print(s1 | s2 | s3, s1.union(s2, s3))
print(s1 & s2 & s3, s1.intersection(s2, s3))
print(s1 - s2 - s3, s1.difference(s2, s3))
print(s1 ^ s2,      s1.symmetric_difference(s2))

print(s1.isdisjoint([10,20,30]), s1.isdisjoint(s2))
print(s1.issubset({1,2,4,7}),    s1.issubset(s1),   s1 <= s1, s1 < {1,2,4,7})
print(s1.issuperset({1,2}),      s1.issuperset(s1), s1 >= s1, s1 > {1,2})

 

[예제] 교집합 연산을 통해서 공통원소 확인

x = ('kim', 'lee', 'park', 'song' , 'hyun')
y = ('ming', 'park', 'song', 'hy')

result = set(x) & set(y)

print(result)
print(len(result))

반응형

댓글