들어가기 전에.
파이썬에서는 자료형을 시퀀스데이터와 시퀀스 데이터가 아닌것으로 나눌 수 있습니다.
시퀀스: 순서를 정하는것
즉. 순서를 정하는 것과 순서를 정하지 않는 것으로 나눌 수 있다는 말입니다.
대표적인 시퀀스 데이터(순서를 정함)
- String, list, tuple
시퀀스가 아닌 데이터(순서와 관련이 없음)
- Set, dictionary
Set(집합)
집합의 정의: 서로가 구별되는 대상들을 순서와 무관하게 모은것.
집합의 성질: 중복을 허락하지 않는다.
집합의 영어표기
집합: Set
합집합: union
차집합: diffrenece
교집합: intersection
대칭차집합: Symmetric difference
A와 B가 있을때 A,B의 대칭 차집합을 구하라 한다면, 교집합만 빼고 출력한다고 보면 됩니다.
즉 A,B가 공통되지 않은 모든것
집합안에 있는 숫자들을 원소 라고 하는데 원소는 element라고 합니다.
예제를 통해 이해하기
합집합
사용: | or union
코드
1 2 3 4 5 6 | SetType1 = {1,2,3,4} SetType2 = {5,6,7,8} UnionSet = SetType1.union(SetType2) print(UnionSet) print(type(UnionSet)) |
실행
실험
1 2 3 4 5 | SetType1 = {1,2,3,4} SetType2 = {5,6,7,8} UnionSet = SetType1.union(SetType2) print(UnionSet[1]) | cs |
list처럼 1의 주소를 출력해 본다면?
실행
에러가 납니다. 이것으로 Set(집합)은 시퀀스 타입이 아닌것을 확인해 볼 수 있습니다.
이것을 고급지게 말하면, Set타입은 인덱싱을 지원하지 않는 타입이라고 합니다.
교집합
사용: & or intersection
코드1
1 2 3 4 5 6 | SetType1 = {1,2,3,4} SetType2 = {3,4,5,6,7,8} UnionSet = SetType1&SetType2 print(UnionSet) print(type(UnionSet)) | cs |
코드2
1 2 3 4 5 6 | SetType1 = {1,2,3,4} SetType2 = {3,4,5,6,7,8} UnionSet = SetType1.intersection(SetType2) print(UnionSet) print(type(UnionSet)) | cs |
실행
차집합
사용: - or difference
코드
1 2 3 4 5 6 | SetType1 = {1,2,3,4} SetType2 = {3,4,5,6,7,8} Difference = SetType1.difference(SetType2) print(Difference) print(type(Difference)) | cs |
실행
집합이 얼마나 편리한 기능인지 알 수 있고, list사용법을 익히는 문제입니다.
문제)
리스트 두개를 만들고, 리스트-리스트 해서 차집합처럼 만들어보시오.
(set을 사용하면 안됨!)
코드
1 2 3 4 5 6 7 8 9 | A = [1,2,3,4] B = [4,5,6,7] C = [] for element in A: if element not in B: C.append(element) print(C) | cs |
실행
문제)
리스트를 두개 만들고 교집합을 출력하시오. (set을 사용하면 안됨!)
코드
1 2 3 4 5 6 7 8 9 | A = [1,2,3,4] B = [4,5,6,7] C = [] for element in A: if element not in B: C.append(element) print(C) | cs |
실행
여집합
A의 여집합이라 하면 합집합에서 A를 뺀 나머지
사용: difference
코드1)
1 2 3 4 5 6 7 | Union = {1,2,3,4,5} A = {1,2} AC = {} AC = Union.difference(A) print(AC) | cs |
실행)
코드2) difference를 사용하지 않고 구해보자
1 2 3 4 5 6 7 8 9 10 11 12 13 | Union = [1,2,3,4,5] A = [1,2] AC = [] for element_1 in Union: if element_1 not in A:#[1,2] 3,4,5참 // #1,2 거짓 CG = 1 else: CG = 0 if CG == 1: AC.append(element_1) print(AC) | cs |
실행)
대칭 차집합
사용: A^B
교집합만 빼고 출력
코드)
1 2 3 4 5 6 7 | A = {1,2,3,4} B = {3,4,5,6} result = A^B print(result) print(type(result)) | cs |
실행)
Set의 중복데이터를 추가하면?
1 2 3 4 5 6 7 8 | List = [1,2,3] List.append(3) Set = {1,2,3} Set.add(3) print(List) print(Set) | cs |
Set은 add로 추가할 수 있습니다.
하지만 집합의 성질상 중복된 원소(element)는 추가 할 수 없기 때문에 추가가 되지 않습니다.
실행
Set의 삭제
1 2 3 4 5 6 | Set = {1,2,3,4} Set.add(5) print('Add한 값: {}'.format(Set)) Set.remove(1) print('Remove한 값: {}'.format(Set)) | cs |
실행
만약에 없는 값을 remove한다면 에러납니다.
'파이썬 프로그래밍 > 파이썬 심화' 카테고리의 다른 글
[Python] 파이썬예제. 행렬곱셈(2byte) 풀이 (5) | 2017.04.11 |
---|---|
[Python] 파이썬 예제. 같은 숫자는 싫어. 중복된 숫자 삭제하 (0) | 2017.04.11 |
[Python] 파이썬 예제. 행렬의 덧셈 (0) | 2017.04.07 |
[Python] 파이썬 예제. 가운데 글자 가져오기 (0) | 2017.04.07 |
[Python] 파이썬 예제. 피보나치 수 풀이 (0) | 2017.03.29 |