파이썬 프로그래밍의 기초, 자료형
- 리스트
- 리스트 자료형(list)
- 리스트 = 집합(배열과 유사)
- 리스트는 어떤 자료형도, 리스트 자체도 요소값으로 가질 수 있다.
- ex) a = [], a = [1, 2], a = ['hello', world'], a[1, 'hello'], a [ 1, 2, ['hello', 'world']
- 리스트 인덱싱, 슬라이싱
- 리스트 인덱싱
- a = [1, 2, ['a', 'b']] / a[0] = 1, a[2][1] = 'b'
- 리스트 슬라이싱
- a = [1, 2, 3, ['a', 'b', 'c'], 4, 5] / a[2:5] = [3, ['a', 'b', 'c'], 4], a[3][:2] = ['a', 'b']
- 리스트 인덱싱
- 리스트 연산자
- 리스트 더하기 +
- a = [1, 2, 3], b = [4, 5, 6] / a + b = [1, 2, 3, 4, 5, 6]
- 리스트 반복하기 *
- a = [1, 2] / a * 2 = [1, 2, 1, 2]
- 리스트 더하기 +
- 리스트의 수정, 변경과 삭제
- 리스트 수정
- 하나의 값 수정하기 : a = [1, 2, 3] / a[2] = 4 / [1, 2, 4]
- 연속된 범위의 값 수정하기 : a = [1, 2, 3, 4] / a[1 : 3] = ['a', 'b'], / [1, 'a', 'b', 4]
- 리스트 요소 삭제하기
- [] 사용 : a = [1, 2, 3, 4] / a[1 : 3] = [] / [1, 4]
- del 함수 사용 : a = [1, 2, 3, 4] / del a[1] / [1, 3, 4]
- 리스트 수정
- 리스트 관련 함수들
- 리스트에 요소 추가 append() : a = [1, 2, 3] / a.append(4) / a = [1, 2, 3, 4] (마지막 요소에 추가)
- 리스트 정렬 sort() : a = [1, 3, 4, 2] / a.sort() / a = [1, 2, 3, 4]
- 리스트 뒤집기 reverse() : a = [1, 3, 4, 2] / a.reverse() / a = [2, 4, 3, 1]
- 위치 반환 index() : a = [1, 2, 3] / a.index(3) = 2 (= a[2] 따라서 .index(0) 사용 불가)
- 요소 삽입 insert() : a = [1, 2, 3] / a.insert(0, 4) / a = [4, 1, 2, 3]
- 요소 제거 remove() : a = [1, 2, 3, 1, 2 ,3] / a.remove(3) / a = [1, 2, 1, 2, 3] (맨 앞 3값만 제거)
- 리스트 요소 꺼내기 pop() : a = [1, 2, 3] / a.pop() / a = [1, 2]
- 리스트에 특정 요소 개수 세기 count() : a = [1, 2, 3, 1] / a.count(1) = 2
- 리스트 확장 extend() : a = [1, 2, 3], b = [6, 7] / a.extend([4, 5] / a = [1, 2, 3, 4, 5] / a.extend(b) / a = [1, 2, 3, 4, 5, 6, 7] // a.extend([4, 5]) == a+=[4, 5]
- 리스트 자료형(list)
- 튜플
- 튜플 자료형(tuple) : 리스트와 거의 유사하지만, ( ) 로 구분, 튜플의 요소 값은 변경 불가능
- t1 = () / t2 = (1, ) / t3 = (1, 2, 3) / t4 = 1, 2 ,3 / t5 = ('a', 'b', ('c', 'd')) = 1개 요소도 , 붙임/괄호 생략 가능
- 튜플의 인덱싱, 슬라이싱
- 모두 리스트와 동일하게 연산 가능!!! but 값 변경 불가능!!
- 튜플 자료형(tuple) : 리스트와 거의 유사하지만, ( ) 로 구분, 튜플의 요소 값은 변경 불가능
- 딕셔너리
- 딕셔너리 자료형(dictonarly) : 대응 관계를 나타내는 자료형(=연관배열, 해쉬), key-value 가 쌍으로 존재한다, key로만 value를 얻는다 이때 딕셔너리는 순서가 없다!, 중복은 가능하긴하다
- Ex) {key1:value1, key2:value2, ~~~ keyN:valueN}
- 딕셔너리 쌍 추가, 삭제
- 추가 : a[2] = 'b' // 딕셔너리는 순서가 없으므로 2는 key, 'b'는 value를 뜻한다
- 삭제 : del a[2] // key가 2인 dic 삭제
- 딕셔너리 사용법
- key값을 사용한 value에 접근
- grade = {'pey':10, 'julliet':30} / grade['pey'] = 10
- 딕셔너리 생성시 주의사항
- key값은 중복 허용되나 여러개중 1개만 인식(랜덤으로...) 웬만하면 중복없이 쓰자!
- key값으로 list, dictionaly, set 사용 불가, tuple은 가능(key값이 바뀌면 안되기 때문)
- key값을 사용한 value에 접근
- 딕셔너리 관련 함수
- key 리스트 만들기 .keys() / a.keys() / dict_keys([~]) <- 리스트와 유사하지만 함수 사용 불가능!, list(dict_keys())로 함수 사용하기
- value 리스트 만들기 values() / a.values() / 앞과 동일
- key, value 쌍 얻기 .items() / a.items() / dict_items([(1,'a'),(2,'b')]) -> key,value를 튜플로 묶은 dict_items 앞과 동일
- key:value 쌍 모두 지우기 .clear() / a.clear() / a = {}
- key로 value 얻기 .get() / a.get('1') = a / a[1]은 1이 존재하지 않으면 오류 발생, get()은 None 리턴
- 해당 key 유무 조사 .in() / 'name' in a / True,False 반환
- 딕셔너리 자료형(dictonarly) : 대응 관계를 나타내는 자료형(=연관배열, 해쉬), key-value 가 쌍으로 존재한다, key로만 value를 얻는다 이때 딕셔너리는 순서가 없다!, 중복은 가능하긴하다
- 집합
- 집합 자료형(set) : 중복 X, 순서 X인 자료형
- s1 = set([1, 2, 3]) / s1 -> {1, 3, 2}, s2 = set('Hello") / s2 -> {"o", "l", "H", "e"}
- 집합 자료형의 활용 ( S1 = set([1,2,3,4,5,6]), S2 = set([4,5,6,7,8,9]) )
- 교집합 &, intersection() / S1 & S2, S1.intersection(S2) = {4, 5, 6}
- 합집합 :, union() / S1:S2, S1.union(S2) = {1,2,3,4,5,6,7,8,9}
- 차집합 -, difference / S1-S2, S1.difference(S2) = {1,2,3}
- 집합 자료형 관련 함수들
- 값 1개 추가하기 .add() / s1.add(4)
- 값 여러개 추가하기 .update() / s1.update([4, 5, 6])
- 특정 값 제거 .remove() / s1.remove(2)
- 집합 자료형(set) : 중복 X, 순서 X인 자료형
리스트 | 튜플 | 딕셔너리 | 집합 | |
구분 | [ ] | ( ) | {key:value} | { } |
순서 | O | O | X | X |
수정 | O | X | O | O |
중복 | O | O | keyX, valueO | X |
연산자로의 연산 | O | X | X | X |
- 자료형의 참,거짓
- 비어있으면 거짓, 채워져 있으면 참! 0,None이 이닌 숫자는 참
- Ex) "hi" 참, (1, ) 참, 3 참 / "" 거짓, { } 거짓, 0 거짓, None 거짓
- 비어있으면 거짓, 채워져 있으면 참! 0,None이 이닌 숫자는 참
- 자료형의 값 저장공간 변수
- 변수 : 객체를 가리키는 것, 객체 : 파이썬의 모든것!!, 파이썬은 별도로 자료형을 쓸 필요가 없다
- ex) a = 3 / a->[3], b = a / a->[3]<-b
- 튜플, 리스트 등도 변수가 될 수 있다 / [1, 2] = 3
- a = b = 'python' 가능
- a, b = b, a (= swap(a, b))
- 참조
- 변수는 객체를 가리킨다, 가리키는 것을 참조(reference)라 한다
- 파이썬에서는 '3'은 상수가 아닌 정수형 객체이고, a = 3, b = 3 일때 둘다 같은 값을 가리킨다
- 참조 개수 return 함수 / import sys, sys.getrefcount(3) / 3에 대한 참조 개수를 알려줌
- 메모리에 생성된 변수 없애기
- del(a) / python이 자동으로 없애주기 때문에 꼭 할 필요는 없다
- 리스트를 변수에 넣고 복사할 때
- a = [1,2,3] , b = a, a[1] = 4 / a[1,4,3] , b[1,4,3]
- b = a 하는 순간 a->[1,2,3]<-b 상태가 된다, 따라서 [1,2,3] => [1,4,3] 이 되어도 b는 게속 참조하고 있다 (=pointer, call by reference와 같은 형태)
- 이를 해결하기 위한 방법(call by value와 같은 형태로 만들기, 새 리스트를 만들어 참조시킴)
- [:] 이용, b = a[:]
- copy모듈 이용, b = copy(a)
- a = [1,2,3] , b = a, a[1] = 4 / a[1,4,3] , b[1,4,3]
- 변수 : 객체를 가리키는 것, 객체 : 파이썬의 모든것!!, 파이썬은 별도로 자료형을 쓸 필요가 없다
cf) 파이썬의 기본은 call_by_reference, call_by_value 둘다 아닌 call_by_assignment 라고 한다. 파이썬의 객체는 크게 두가지로 나뉘는데 1.가변객체(mutable), 2.불변객체(immutable)이다 불변 타입의 객체 = call by value 가변 타입의 객체 = call by reference 즉 할당 되는 것에 따라 전달 방식이 달라지는 것이다.
'IT공부 > 점프 투 파이썬' 카테고리의 다른 글
파이썬 기본 문법 익히기_4 (0) | 2022.04.26 |
---|---|
파이썬 기본 문법 익히기_3 (0) | 2022.04.10 |
파이썬 기본 문법 익히기_1 (0) | 2022.03.23 |