Python
20210105_Python 입문3, 자료구조, list, tuple, dict, set
Python 입문 03
Python 자료구조 (list, tuple)
1. List (리스트)
[ ]
대괄호 사용그릇, 배열로 어떤 특징의 모음이라고 보면 된다.
순서O, 중복O, 수정O, 삭제O
1) 선언
a = [1, 2, 3, ['a', 'b', 'c']] # 리스트 내에 리스트 중복 가능
b = list(1, 2, 3, 'h','i', 'j', 'k') # 명시적 사용도 가능
2) 인덱싱
print(a[2]) # 인덱싱 번호 2번 출력
print(a[3][1]) # 중복 리스트 인덱싱 번호 1번 출력
# 인덱싱 번호 음수도 가능
3) 슬라이싱
저번 시간에 엄청 어렵게 이해했는데 편하게 이해하는 법 만듦
ex) a[ x : y : z ]
[ X 인덱싱 넘버 값 에서 :
Y-1 인덱싱 번호 값 까지 반환 :
조건으로 X+nZ 인덱싱 넘버 값만 반환 (n = 0 , 1, 2, 3, ...) ]
음수에서도 동일
print(a[3][0:2]) # 중복 list에서 슬라이싱 가능
4) 연산
print(a + b) # 하나의 리스트로 만들어줌
print(a * 3) # 길이가 3배로 늘어남
print(str(a[0]) + 'hi') # print(c[0] + 'hi') -> error -> str로 형 변환
print('{0}hi'.format(a[0])) # 결과 : 1hi
print('{a}hi'.format(a = a[0])) # 결과 : 1hi
print('%dhi' % (a[0])) # 결과 : 1hi
print('%shi' % (a[0])) # 결과 : 1hi
print('%fhi' % (a[0])) # 결과 : 1.000000hi
5) 리스트 수정, 삭제
- 수정
a = [1, 2, 3, ['a', 'b', 'c']]
a[0] = 25
print(a) # 인덱스 넘버 0 자리에 25값 으로 대체,수정
a[1:2] = [7, 8, 9] # 슬라이싱을 통한 "리스트" 대체,삽입은 값 형태로 삽입 됨
a[1] = [10, 11, 12] # 인덱싱을 통한 "리스트" 대체,삽입은 리스트 형태로 삽입 됨
- 삭제
a = [1, 2, 3, ['a', 'b', 'c']] del a[1] # a의 인덱싱 넘버 1의 값 삭제 a.remove(2) # 값 2를 찾아서 삭제 a.pop() # 맨 마지막 값을 끄집어 내고 삭제 a.pop(1) # 인덱스 넘버 1의 값을 끄집어 내고 삭제
6) 리스트 함수(method)
함수 쓰면서 조작하는데로 변수 내 리스트 값은 계속 반영되는 것임
a = [1, 2, 3, ['a', 'b', 'c']]
b = ['d', 'e', 'f']
c = [1, 2, 3]
a.append(4) # a 리스트 끝 부분에 값 추가
a.append(b) # 리스트 끝 부분에 b 변수의 리스트 자체를 추가
a.extend(b) # 리스트 끝 부분에 b 변수 리스트의 값을 추가
b.sort() # a리스트 내 값들 오름차순 정렬
# 단, 문자(str), int, list 등 데이터 타입이 다를 경우 불가
c.reverse() # a리스트 내 값들 내림차순 정렬
a.insert(2, 7) # 인덱스 넘버 2번에 7 추가 하고 뒤엣건 밀림 (수정 대체X)
2. Tuple (튜플)
( )
소괄호 사용- 순서 O, 중복O, 수정X, 삭제X -> insert, append 등 사용 불가
- 프로그램에서 변하면 안되는 중요한 값들을 튜플로 지정
1) 선언
a = (1, 2, 3, 4) # 소괄호 사용
b = tuple(('a', 'b', 'c', 'd')) # 직접 명시
c = (1, 2, ('e', 'f', 'g')) # 중복 가능
2) 인덱싱 , 슬라이싱
a = (1, 2, 3, 4)
b = ('a', 'b', 'c', 'd')
c = (1, 2, ('e', 'f', 'g'))
print(c[2]) # 인덱싱은 [] 대괄호 사용
print(c[2][2]) # 중복 인덱싱 가능
print(c[2][0:2]) # 중복 슬라이싱 가능
3) 연산
a = (1, 2, 3, 4)
b = ('a', 'b', 'c', 'd')
print(a+b) # 튜플 값 합치기 가능
print(a * 3) # 길이 3배 (반복해서)
4) 함수
a = (1, 2, 3, 4)
print(a.index(3)) # 값3 의 인덱스 넘버 반환
print(a.count(2)) # 값2 의 개수 반환
print(3 in a) # 변수 a 에 3이 포함하는지 불린 반환
print(3 not in a) # 변수 a 에 3이 안 포함하는지 불린 반환
3. Dictionary (사전) , dict
{ }
중괄호 사용- 순서 x, 중복x, 수정O, 삭제O
- Xml, css, json, js, mongoDB 등의 형식이 비슷함
- key 와 value 로 이루어 져있고 이렇게 한 쌍을 item 이라고 함
1) 선언
a = {'name': 'kim', 'phone': '010-1234-1234', 'birth': '960402'} # key 중복 X , value 값 중복 O
b = {0: 'dog', 1: 'cat'} # 숫자 key 가능 한데 주로 문자로 함
C = {'arr': [1, 2, 3, 4]} # 값은 모든 데이터 타입이 가능
2) 출력, 수정
- 출력
print(a['name']) # key 값이 없으면 error로 실행 안됨
print(a.get('name')) # Key 값이 없어도 none 결과 출력. 안전하게 조회 가능
- 수정, 추가
a['name'] = ['kang'] # 기존의 있는 키에 값을 변경
a['address'] = ['Seoul'] # 새로운 키 와 값을 추가
a['rank1'] = [1, 2, 3] # 새로운 키 와 값(리스트 타입) 추가
a['rnak2'] = (1, 2, 3) # 새로운 키 와 값(튜플 타입)을 추가
3) 인덱싱(key) , 슬라이싱
print(a['name']) # key 값을 가지고 출력하고 따로 인덱싱 번호는 없음
print(a['rank1'][1]) # 중복 인덱싱 가능 어차피 리스트가 들어 있기 때문에
print(a['rank2'][1]) # 중복 인덱싱 가능 튜플 값
print(a['rank'][0:2]) # dict 안에 Key: list 슬라이싱 가능
print(a['rank2'][0:2]) # dict 안에 Key: tuple 슬라이싱 가능
4) 연산 X
print(a+b) # dict + dict 불가
print(a * 3) # dict 3배 불가
5) 함수
print(a.keys()) # dict 타입으로 key 만 가져옴 그때 그때 순서는 다름
# a.keys()의 인덱싱은 불가
print(list(a.keys())) # list 타입으로 key만 가져옴
print(list(a.key())[0:2]) # list 형에서 인덱싱 가능
temp = list(a.keys()) # 또는 임시변수에 선언
print(temp[0:2]) # 인덱싱 가능
# dict 형태 인덱싱은 안되고 list, tuple 형태만 가능
print('name' in a)
print('name' not in a) # key는 in, not in 가능
4. 집합 set
set([])
을 사용 ,set 직접 선언- 순서 x, 중복x, 수정O, 삭제O
- 수치계산, 데이터 분석 등 (내부적, 오픈소스 등에 쓰임)
1) 선언, 출력
a = set()
b = set([1, 2, 3, 4])
c = set([1, 4, 5, 6, 6])
print(type(a))
print(c) # 중복 제거 됨 집합이기에 , 터미널에서는 중괄호로 결과 출력
2) 슬라이싱 (tuple, list로 형변환 필요)
t = tuple(b)
print(b)
# 또는
print(tuple(b))
print(list(b))
# 형 변환 작업
print(tuple(b)[0:2]) # 슬라이싱 가능
print(list(b)[0:2])
3) 함수
- 교집합
s1 = set([1, 2, 3, 4, 5, 6])
s2 = set([4, 5, 6, 7, 8, 9])
print(s1.intersection(s2)) # 교집합 함수 intersection
print(s2.intersection(s1))
print(s2 & s1) # 교집합 기호 '&'
- 합집합
s1 = set([1, 2, 3, 4, 5, 6])
s2 = set([4, 5, 6, 7, 8, 9])
print(s1 | s2) # 합집합 기호 '|' vertical bar , 수직선
print(s1.union(s2)) # 합집합 함수 union
- 차집합
s1 = set([1, 2, 3, 4, 5, 6])
s2 = set([4, 5, 6, 7, 8, 9])
print(s2 - s1) # 차집합 기호 '-'
print(s2.difference(s1)) # 차집합 함수 difference
- 추가 제거
s3 = set([7, 8, 10, 15])
s3.add(18) # 집합에 뒷부분 추가 함수 , 중복은 알아서 필터링 됨
print(s3)
s3.remove(15)
print(s3) # 주의 print(s3.remove(15)) 는 안됨
4) 연산 X
print(s1+s2) # set + set 불가
print(s1 * 3) # set 3배 불가
---
20210105_NRC (X)
오늘은 런닝 건너 뛰었다. 내일 하자
데이터 타입 자료구조를 끝냈다.
아직까진 공부시간이 대략 7~8 시간 밖에 안되는 것 같다. 4시간 더 확보하도록 하자. 진도가 느리게 나가면 그만큼 열심히 더 하면 될 듯
물론 포스팅에 시간이 좀 걸려도 복습으로 생각하자.
'Python' 카테고리의 다른 글
20210108_ Python 입문6, 클래스(class), 클래스의 상속, 모듈(module)과 패키지(pakage) (0) | 2021.01.09 |
---|---|
20210107_ Python 입문5, 함수,*args,**kwargs, parameter hint, lambda (0) | 2021.01.07 |
20210106_Python 입문4, 흐름제어 조건문, 반복문, List comprehension(리스트 컴프리핸션) (0) | 2021.01.07 |
20210104_Python 입문2, 가상환경 설정, pip, 데이터 형태, 문자,숫자 함수 등 (0) | 2021.01.05 |
20210103_Python 입문, VScode 단축키 (0) | 2021.01.04 |