설명에 앞서 정제된 표현이 되어있는 아래 2개의 사이트를 방문하시는 것을 추천드립니다. 특히 1번이 아주 자세히 설명되어 있습니다.
최대한 친절히 설명하기 위해 예시를 많이 넣고 많이 적었지만 다소 장황하고 산만할 수 있다는 점에 양해부탁드립니다.
1. 파이썬 - 기본을 갈고 닦자! : https://wikidocs.net/16044 - 매우 자세함
2. 점프 투 파이썬 : https://wikidocs.net/1015 - 간단
목차 - 클릭하면 해당 라인으로 이동합니다.
set은 영어로 집합이라는 뜻입니다. 때문에 집합의 성질을 가지는 함수들을 비롯해 중복되지 않은 원소(unique)를 얻고자 할 때 사용할 수 있는 python 자체 내장 함수로 sum,min,max와 같이 바로 사용이 가능합니다.
다만 {}의 표기법을 사용하고자 할 때는 주의하셔야합니다.
왜냐하면 {} 자체만으로는 dict를 선언하는 것이기 때문입니다.
이와 관련해서는 아래 코드를 살펴보시길 권장드립니다.
s = set()
s = set([1,2,3,4])
s = {1,2,3,4}
print(type(s)) #set
s = {}
print(type(s)) #dict
#추가
#s=set(1,2,3,4,5) #error, list 형태로 넣어야 함
앞에서 설명했던 것처럼 set은 중복을 없애줍니다.
그럼 어떤 때에 사용할 것인가!
아마 for 문을 돌면서 어떤 값을 얻었을 때 set에 계속 집어넣고 마지막에 최대나 최소, 합을 구하고자할 때 많이 사용할 것같습니다.
저에게는 baekjoon 문제에서 이를 활용해서 좀 더 수월하게 중복제거를 했던 기억이 있습니다.
첫 번째 코드를 실행하면 중복이 사라진 채 표현되는 것을 확인하실 수 있습니다.
3번째 코드를 실행하면 다양한 경우에서 set 중복으로 걸러지는 것을 확인하실 수 있습니다.
특이한 것으로 확인 가능한 것은 'a'와 ('a')는 같은 것으로 인식한다는 것
또 다른 것은 ('a','b')와 ('b','a')는 서로 다른 것으로 인식한다는 것입니다.
s = set([1,1,1,1,1,2,2,3,3,3,3,4,4,4,5,5,5,5])
print(s) # {1, 2, 3, 4, 5}
s = {'a',1,2,1,4,(3,3),'abc',('a','b'),('b','a'),('a'),(4,'a')}
print(s) # {1, 2, 4, (3, 3), 'abc', (4, 'a'), ('a', 'b'), 'a',('b','a')}
set을 선언하고 그 안에 계속 추가하고 싶다면 .add()를 쓰면 됩니다.
그러나 여기서 주의해야합니다.
반드시 하나!
하나의 숫자 혹은 글자, 문장, 튜플만이 가능합니다.
만약 여러개의 값을 추가하고 싶다면 4번 update를 확인하세요.
s=set([1,2,3,4])
print(s) # {1, 2, 3, 4}
#추가
s.add(5)
print(s) # {1, 2, 3, 4, 5}
s.add('hellow nice meet you')
print(s) # {1, 2, 3, 4, 5, 'hellow nice meet you'}
s.add(('a','a','b'))
print(s) # {1, 2, 3, 4, 5, ('a', 'a', 'b'), 'hellow nice meet you'}
#Error
#s.add([6,7,8]) # error : 반드시 하나의 숫자 혹은 글자, 문장, 튜플만 가능합니다.
#s.add({6,7,8}) # error : 반드시 하나의 숫자 혹은 글자, 문장, 튜플만 가능합니다.
add에서는 1개의 값만을 추가할 수 있었지만 update는 여러개의 값을 추가해서 중복은 자동으로 제거하는 과정을 거칠 수 있습니다.
다만 여러개를 넣어야하기에 리스트나 set 안에 넣어 표현해야합니다.
s = set([1,2,3,4]) # 또는 s = {1,2,3,4}
print(s) # {1, 2, 3, 4}
s.update([1])
print(s) # {1, 2, 3, 4}
s.update([1,2,3,4])
print(s) # {1, 2, 3, 4}
s.update([1,2,1,7,7,7,'a','b',('a')])
print(s) # {1, 2, 3, 4, 'b', 7, 'a'}
a = [0,1,2,3]
s.update(a)
print(s) # {0, 1, 2, 3, 4, 'b', 7, 'a'}
s.update({7,8,9,9})
print(s) # {0, 1, 2, 3, 4, 'b', 7, 8, 9, 'a'}
set 안의 제거법은 크게 2가지 method가 있습니다.
하나는 remove, 또 다른 하나는 discard입니다.
두 함수 모두 원소를 제거하는데 사용할 수 있습니다.
그러나 차이가 존재합니다.
remove는 set 집합 안에 원소가 없는 경우 KeyError가 발생합니다.
discard는 집합 안에 원소가 없는 경우에도 KeyError가 발생하지 않느다는 점이 차이입니다.
s = {0,1,2,3}
s.remove(0)
print(s) # {1, 2, 3}
#s.remove(0) # KeyError
s.discard(0)
print(s) # {1, 2, 3}
앞에서 저는 set은 집합으로 그 성질을 사용할 수 있는 함수들이 있다고 소개했습니다. 이곳에서는 그 성질을 표현하는 대표적인 예로 기호나 함수로 그 의미를 소개할 수 있다는 것을 보여드리고자 합니다.
합집합 : | or union
교집합 : & or intersection
차집합 : - or difference
대칭차집합(합집합 - 교집합) : ^ or symmetric_difference
i = {1,2,3,4,5}
j = {3,5,7,9}
print(i|j) # {1, 2, 3, 4, 5, 7, 9}
print(i.union(j)) # {1, 2, 3, 4, 5, 7, 9}
print(i&j) # {3, 5}
print(i.intersection(j)) # {3, 5}
print(i-j) # {1, 2, 4}
print(i.difference(j)) # {1, 2, 4}
print(i^j) # {1, 2, 4, 7, 9}
print(i.symmetric_difference(j)) # {1, 2, 4, 7, 9}
여기까지가 Python 내장함수 집합 set에 관한 내용이었습니다.
읽어주셔서 감사합니다.