일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- TypeScript
- Vue
- EC2
- merge
- NeXT
- 카톡
- SAA
- node
- 튜플
- Class
- MongoDB
- async
- wetube
- pandas
- 중급파이썬
- lambda
- docker
- RDS
- dict
- react
- 채팅
- AWS
- Props
- socket io
- 파이썬
- S3
- crud
- SSA
- git
- flask
- Today
- Total
초보 개발자
18강 자료형 분류와 set & frozenset 본문
[자료형 분류]
파이썬이 제공하는 다음과 같은 자료형들을 가리켜 '시퀀스 타입'이라고 한다. 문자열의 경우 '텍스트 시퀀스 타입'이라 부르지만 이 역시 시퀀스 타입의 일종이다.
- 리스트 list 클래스의 객체
- 튜플 tuple 클래스의 객체
- 레인지 range 클래스의 객체
- 문자열 str 클래스의 객체
이들에겐 저장된 값의 순서 정보(위치 정보가) 존재한다는 특징이 있다. 즉 저장된 값의 순서 정보가 존재하는 것이 시퀀스 타입의 가장 큰 특징이다.
따라서 이들을 대상으로 다음 두 가지 연산을 할 수 있다.
- 인덱싱 연산
- 슬라이싱 연산
인덱싱 연산 : 특정 값 하나를 참조하는 연산
s[0], s[1], s[2]
슬라이싱 연산 : 시작과 끝을 정하여 이를 참조하는 연산
s[0:3], s[5:9]
그리고 다음 자료형을 가리켜 '매핑 타입'이라고 한다.
- 딕셔너리 dict 클래스의 객체
매핑 타입은 본질적으로 저장된 값의 순서 또는 위치 정보를 기록하지 않는 자료형이다.
(3.7버전 부터는 순서 유지 하기 시작했지만 본질적으로는 이렇다.)
따라서 이를 대상으로 인덱싱이나 슬라이싱 연산이 불가능하다.
그리고 다음 두 자료형을 가리켜 셋타입이라고 한다.
- 셋(set) set 클래스의 객체
- 프로즌셋 frozenset 클래스의 객체
셋 타입은 말 그대로 수학의 집합을 표현한 자료이다. 집합은 다음 두가지 특징을 가지고 있다.
- 수학의 집합은 저장 순서를 유지하지 않는다.
- 수학의 집합은 중복된 값의 저장을 허용하지 않는다.
때문에 셋과 프로즌셋도 저장된 값의 순서 정보가 존재하지 않고 중복된 값의 저장도 허용하지 않는다.
두 차이점은
set은 뮤터블 객체(수정가능) frozenset은 이뮤터블 객체(수정 불가능)이다.
set은 { } 안에 넣어 dict와 비슷하게 생격지만 dict은 키와 값을 쌍으로 저장하지만 set은 값만 넣어준다.
A = {'a','c','d','f'}
B = {'a','b','d','e'}
A - B 차집합
{'c','f'}
A & B 교집합
{'d','a'}
A | B 합집합
{'e','f','d','a','b','c'}
A ^ B A와 b의 대칭 차집합 (A-B) U (B-A)
{'e','f','b','c'}
iterable객체를 set()안에다 두면 set이 만들어진다.
빈 집합을 만들고 싶으면 set()만 쓰면된다.
A = set(['a','c','d','f']) set함수에 iterable객체 전달해서 set 생성
B = set('fdca') 문자열도 iterable 객체이므로 이를 통해 set 생성 가능
A == B 저장순서 상관 없다. 내용물만 같으면 True
True
'a' in A 집합 A에 a원소가 있는가?
True
'b' not in A 집합 A에 원소 b가 없는가?
True
for c in A & B: A & B의 결과로 얻은 집합을 대상으로 FOR루프 구성
print(c,end = ' ')
d c f a
A = frzenset(['a','c','d','f'])
B = frozenset(['a','b','d','e'])
A - B
frozenset({'c','f'})
A | B
frozenset({'e','f','d','a','b','c'})
A == B
False
'a' in A
True
for c in A & B:
print(c,end = ' ')
d a설명한 모든 내용이 frozenset 대상으로도 동일하게 적용된다.
셋을 활용해서 중복된 값을 제거할 수도 있다. 쉽게
t = [3,3,3,7,7,'z','z']
t = list(set(t))
t
[3,'z',7]
set과 frozenset의 차이점에 대해서 알아보자
[set 변경가능, frozenset 변경 불가]
set은 뮤터블 객체(수정가능) frozenset은 이뮤터블 객체(수정 불가능)이다.
nst은 뮤터블 객체이기 때문에 집합 자체를 변경시키는
add (원소 추가)
discard (원소 삭제)
update, |= 다른 집합의 원소 전부 추가하기
intersection_update, &= 다른 집합과 공통으로 있는 원소만 남기기
difference_update, -= 다른 집합이 갖는 원소 모두 삭제하기
symmetric_difference_update, ^= 공통으로 갖지 않는 것들은 추가하고 나머지는 삭제
등을 사용할 수 있따.
os = {1,2,3,4,5} # set
os.add = (6) # 원소 6을 집합 os에 추가
os.discard(1) # 원소 1을 집합 os에서 삭제
os
{2,3,4,5,6}
os.update({7,8,9}) # 집합 os에 {7,8,9}의 모든 원소 추가
os
{2,3,4,5,6,7,8,9}
os &= {2,4,6,8} # 집합 os에서 {2,4,6,8}와 겹치는 원소만 남김
os
{2,4,6,8}
os -= {2,4} #집합 os에서 {2,4}의 원소를 모두 삭제
os
{6,8}
os^= {1,3,6} #집합 os에서 {1,3,6}에 과 겹치는 원소는 삭제하고 없는 원소는 추가
os
{1,3,8}
[set 컴프리헨션]
앞서 리스트와 딕셔너리를 대상으로 한 '컴프리헨션'을 소개하였다. 여기에 더해 set도 컴프리헨션이 가능하다.
s1 = {x for x in range(1,11)}
s1
{1,2,3,4,5,6,7,8,9,10}
s2= {x**2 x in s1}
s2
{1,4,9,16...100}
s3 = {x for x in s2 if x < 50}
s3
{1,4,9,16..36}
'Python > 윤성우 열혈 파이썬' 카테고리의 다른 글
20강 enumerate와 문자열 비교 (0) | 2022.01.17 |
---|---|
19강 정렬 기술 sort, sorted, key (0) | 2022.01.17 |
17강 dict & OrderedDict (0) | 2021.12.24 |
16강 dict & defaultdict (0) | 2021.12.24 |
15강 함수 호출과 매개변수 선언에 있어서 *와 **의 사용규칙 (0) | 2021.12.22 |