python

파이썬 set() 집합 함수 총정리

고로케 2021. 6. 21.
반응형

1. set() 집합이란?

:  순서가 없고 각 요소는 유니크하다, set은 mutable(변경가능) 한 객체이다. 

*mutable(변경가능) 객체 : 리스트(list), 딕셔너리(dict), set,, -> id() 값은 일정하고 내부 값만 바뀜

*immutable(불변) 객체 : 자료형(int,str), 튜플(tuple) -> 내부 값이 바뀌면 id() 값이 바뀜

*set 자체는 mutable 객체지만 내부 요소로 mutable 한 값을 가질 수 없다.

s = {"1", 3, 5, (1,3)}

<아래는 Type Error>
s = {"1", 3, 5, [1,3]}
s = {"1", 3, 5, {1,3}}
s = {"1", 3, 5, {1:1,3:3}}

 

2. 사용법

s = set([1,3,5,7])

>> {1, 3, 5, 7}
  • set() 은 순서가 없어서 어떤 값이 먼저 나올지 알 수 없다.
for i in {1, 2, 4, 8, 16,32}:
    print(i)
>>32
1
2
4
8
16
  • 요소 들어있는지 확인 ( list 보다 빠르다 )
s = set([1,3,5,7])
print(3 in s)

>> True

 

  • s.add() 요소 추가
k = {1, 3}
k.add(5)

>>{1, 3, 5}

 

  • s.update() set에 리스트 한번에 추가(중복 값은 제거됨)
 k = {1, 2, 3}
 k.update([3, 4, 5])

>> {1, 2, 3, 4, 5}

 

  • s.remove() set의 요소 제거 -> 없는 요소면 에러남
 k = {1, 2, 3}
 k.remove(3)
 
 >> {1, 2}
 
 # 없는걸 제거하면 keyError
 k.remove(5)

 

  • s.discard() : set의 에러 없는 요소제거 -> 없는 요소를 넣어도 에러 안남
 k = {1, 2, 3}
 k.discard(5)
 
 >> {1, 2, 3}

 

  • s.copy() : set의 복사
 s = {1, 3, 5}
 t = s.copy()
 
 >> s : {1, 3, 5}
 >> t : {1, 3, 5}

 

  • set() 집합 연산자 : 합집합, 교집합, 차집합

1) 합집합 : a_set | b_set (= a_set.union(b_set))

a_set = {1, 2, 3, 4, 5}
b_set = {3, 4, 5, 6, 7}
c_set = a | b
>> {1, 2, 3, 4, 5, 6, 7}

d_set = a_set.union(b_set)
>> {1, 2, 3, 4, 5, 6, 7}

 

2) 교집합 : a_set & b_set ( = a_set.intersection(b_set))

 a_set = {1, 2, 3, 4, 5}
 b_set = {3, 4, 5, 6, 7}
 c_set = a & b
 >> {3, 4, 5}
 
 d_set = a_set.intersection(b_set)
  >> {3, 4, 5}

 

3) 차집합 : a_set - b_set ( = a_set.difference(b_set))

a_set = {1, 2, 3, 4, 5}
b_set = {3, 4, 5, 6, 7}
c_set = a_set - b_set
>> {1, 2}
d_set = b_set - a_set
>> {6, 7}

e_set = a_set.difference(b_set)
>> {1, 2}
f_set = b_set.difference(a_set)
>> {6, 7}

 

 

4) (합집합 - 교집합) : a_set ^ b_set (= a_set.symmetric_difference(b_set))

a_set = {1, 2, 3, 4, 5}
b_set = {3, 4, 5, 6, 7}
c_set = a ^ b
>> {1, 2, 6, 7}

d_set = a_set.symmetric_difference(b_set)
>> {1, 2, 6, 7}

5) a.issubset(b) : a가 b의 부분집합 여부 확인

a = {1, 2, 3, 4, 5}
b = {1, 2, 3}
a.issubset(b)
>> False

b.issubset(a)
>> True

 

6) a.issuperset(b) : a가 b를 부분집합으로 가지고 있는지 확인

a.issubset(b) 와 반대

a = {1, 2, 3, 4, 5}
b = {1, 2, 3}
a.issuperset(b)
>> True

b.issuperset(a)
>> False

 

7) a.isdisjoint(b) : a와 b 사이에 교집합이 1개도 없으면 True, 있으면 False

a = {1, 2, 3}
b = {4, 5, 6}
a.isdisjoint(b)
>> True

c = {1, 2, 3}
d = {3, 4, 5}
c.isdisjoint(d)
>> False

 

 

 

반응형

댓글