#7. 파이썬 기본지식 공부(2)_스칼라형, 튜플, 리스트, 사전
2021. 12. 23. 10:47
*본 글은 '파이썬 라이브러리를 활용한 데이터 분석(저자 웨스 멕키니, 한빛미디어)' 부록A를 참고해 작성되었음을 밝힙니다. 내용에 오류가 있을 수 있습니다.
[목차]¶
- 표준 파이썬 스칼라 자료형
- int와 float자료형
- 문자열
- 자료 구조와 순차 자료형
- 튜플
- 리스트
- 사전
11. 표준 파이썬 스칼라 자료형_숫자형, 문자열
자료형 | 설명 |
---|---|
None | 파이썬의 널(null)값. Null 인스턴스만 유일하게 존재한다. |
str | 문자열 자료형. 파이썬3에서는 유니코드 |
unicode | 유니코드 문자열 자료형 |
float | 배정밀도 부동소수점 실수. double형이 따로 존재하지 않는다 |
bool | 불리언을 떠올리자. 참True과 거짓False |
int | 부호가 있는 정수. 값의 범위는 플랫폼에 따라 다르다. |
long | 무한 정밀도의 부호가 있는 정수. int값이 범위를 넘으면 자동으로 long자료형으로 변환된다 |
[1] int와 float자료형¶
int자료형의 크기는 플랫폼의 크기가 32비트인지 64비트인지에 따라 다르다. 값이 범위를 넘으면 long으로 변환된다.
부동소수점 숫자는 float자료형을 사용한다. 과학표기법으로 나타낼 수 있다.
파이썬 3부터 정수의 나눗셈에서 부동소수점 형식의 출력이 지원된다. (2/3=1.5) 정수값만 반환하고 싶을때는 //를 사용한다. (2//3=1)
복소수의 허수 부분은 j로 나타낸다. ex.1+2j
[2] 문자열¶
- 작은따옴표, 큰따옴표로 둘러싸서 문자열을 표현한다.
-
a = 'Have a lovely day'
- 여러줄에 걸친 문자열은 세 개를 붙인다.
-
b = """ 안녕하세요 이것들은 분명 전에 필교수업에서 배운 것 같은데 초면인 것 같은 내용이군요. """
- 파이썬 객체는 str함수를 사용해서 문자열로 변환할 수 있다.
-
a = 23 aa = str(a) #출력값은 23에서 '23'으로 변환
- 문자열은 리스트, 튜플과 같은 순차적인 자료형으로 취급된다. (하나의 단어는 여러개의 알파벳이 순차적으로 나열된 것)
-
s = 'python' list(s) #출력값은 ['p', 'y', 't', 'h', 'o' 'n'] s[:3] #출력값은 'pyt' 리스트의 3번째까지 출력
- 문자열은 변경 불가능하다. 새로운 문자열을 생성해야 한다.
In [8]:
a = 'Have a lovely day'
b = a.replace('lovely', 'lonely')
b
Out[8]:
'Have a lonely day'
- 두 개의 문자열을 더해서 하나의 새로운 문자열을 만들 수 있다.
In [11]:
a = '공부가 하기 싫어요!'
b = '로또나 당첨돼라!'
a + b
Out[11]:
'공부가 하기 싫어요!로또나 당첨돼라!'
12. 자료 구조와 순차 자료형
[1] 튜플¶
- 1차원의 순차 자료형. 고정된 크기를 가지며, 튜플 안의 내용은 변경 불가능하다. 여러 값을 쉼표로 구분해서 대입할 수 있다.
- 중첩된 튜플을 정의할 때는 괄호로 튜플을 구분해준다.
- tuple메서드를 통해 튜플로 변환 가능하다. 모든 순차 차료형과 이터레이터를 변환할 수 있다.
- 대괄호를 사용해서 튜플의 각 원소에 접근할 수 있다. 리스트에서의 방식과 같다. 인덱스는 0부터 시작한다.
- 튜플에 저장된 객체 자체는 변경할 수 있다(리스트 객체에 뭘 추가한다던지). 그러나 생성된 객체를 변경하는 것은 불가능하다(다른 걸로 재정의하는 등)
- 튜플 연산하기는 아래에 적어놓은 7번째 코드를 참조하자.
- 튜플의 크기와 내용을 변경할 수 없으므로 인스턴스 메서드가 많지 않다.
##1. 튜플 정의하기
tup = 4, 5, 6
tup
#출력값은 (4, 5, 6)
##2. 중첩된 튜플 정의하기
nested_tuple = (4, 5, 6), (7, 8)
nested_tuple
#출력값은 ((4, 5, 6), (7, 8))
##3. tuple메서드를 사용해 리스트를 튜플로 변환하기
tuple([4, 5, 6])
##4. 문자열 'string'을 튜플로 변환하여 변수 tup에 저장
tup = tuple('string')
tup
#출력값은 튜플인 ('s', 't', 'r', 'i', 'n', 'g')
##5. 튜플 원소 출력하기
tup[2]
#출력값은 튜플 안의 세 번째 원소인 'r'
##6. 튜플의 성질
tup = tuple(['Hi', [3, 4], True])
tup[2] = False
#객체를 다른 걸로 변경할 수 없다
tup[1].append(5)
tup
#출력값은 ('Hi', [3, 4, 5], Ture)로 변화한다.
#저장된 객체를 다른 걸로 변경은 불가능하지만 이런 차원의 변경은 가능하다.
##7. 튜플 연산하기
##7-1 튜플끼리 이어붙일때는 +연산자를 사용한다.
(4, 5, 6) + (7, 8) + ('hi', 'hello')
#출력값은 (4, 5, 6, 7, 8, 'hi', 'hello')
##7-2 튜플에 정수를 곱하면 정수의 값 반큼 복사되어 이어진다. 객체의 복사가 아니라 참조의 복사이다.
(4, 5) *3
#출력값은 (4, 5, 4, 5, 4, 5)
##7-3 튜플 안의 객체 하나만 따로 떼어내고 싶으면 튜플에 대응하는 변수에다 저장하고 변수를 사용한다.
tup = (4, 5, 6)
a, b, c = tup #tup튜플을 변수에다 저장
b #변수에 튜플이 저장되어 있으므로 떼어내고 싶은 변수를 입력하면 튜플에서 대응되는 값이 출력된다.
#따라서 여기서 b를 입력하면 출력값은 5
tup1 = 4, 5, (6, 7)
[2] 리스트¶
- 리스트는 크기나 내용을 변경할 수 있다. [] 또는 함수 list를 사용한다.
-
a = [1, 2, 3, 4, 2, 6] a.count(2) #출력값은 2
- 튜플을 리스트로 바꿀 수 있다.
-
tup = ('Hi', 'my', 'name', 'is', 'Zeeto') b_list = list(tup) b_list #출력값은 ['Hi', 'my', 'name', 'is', 'Zeeto'] 튜플을 리스트로 변환한 것 b_list[0] = 'Hello' #b_list의 0번째 인덱스 내용을 변경 b_list #출력값은 ['Hello', 'my', 'name', 'is', 'Zeeto']
- insert 메서드를 사용해 리스트 특정 위치에 값을 추가할 수 있다.
-
b_list = ['Hello', 'my', 'name', 'is', 'Zeeto'] b_list.insert(1, 'Minsu, ') b_list #출력값은 ['Hello', 'Minsu, ', 'my', 'name', 'is', 'Zeeto'] #insert함수를 사용하면 변경되는 위치 오른쪽의 모든 인덱스 값이 변화하므로 연산 비용이 상대적으로 더 요구된다.
- pop 메서드를 사용해 특정 위치의 값을 반환하고(메서드 호출하면 출력값은 리스트 안의 대응되는 값) 그것을 리스트에서 삭제한다.
-
b_list.pop(1) #위의 코드와 이어서 보기. 출력창에는 두 번째 값인 'Minsu, '가 반환됨 b_list #출력값은 'Minsu, '가 삭제된 ['Hello', 'my', 'name', 'is', 'Zeeto']
- remove 메서드를 사용해서 원소 삭제 가능. 중복되는 값들이 존재하는 경우 맨 앞의 인덱스부터 순차적으로 삭제된다.
c_list = [2, 3, 4, 5, 3, 7, 8] c_list.remove(3) c_list #출력값은 [2, 4, 5, 3, 7, 8] 전체가 한꺼번에 삭제되는 것이 아니다. #보통 remove와 append 메서드를 사용해서 리스트의 내용을 편집한다.
- in 예약어로 리스트의 값을 검사할 수 있다.
-
#예약어란, 이미 문법적인 용도로 사용되고 있어 변수명이나 함수명으로 사용할 수 없는 것들을 의미한다. return, in 등이 해당된다. 'Zeeto' in b_list #출력값은 True #리스트의 내용을 모두 알고 싶으면 각각의 객체에 대해 일일이 검색해서 알아봐야 한다. 좀 느리다는 단점이 있다.
- 리스트 연산 및 편집하기
##1. + 연산자를 사용해 여러개의 리스트를 합칠 수 있다.
[1, 2, 3] + [4, 5, 6]
#Out: [1, 2, 3, 4, 5, 6]
##2. extend 메서드로 여러 개의 값을 한꺼번에 추가할 수 있다. (append를 여러 번 할 필요 없다)
d_list = [1, 2, 3]
d_list.extned([4, 5, (6, 7)])
d_list
#Out: [1, 2, 3, 4, 5, (6, 7)]
#리스트를 이어붙이는 것은 새로운 리스트를 생성해야 하므로 extend보다 연산 비용이 높다.
#대형 리스트는 기존 리스트를 활용하는 extend 메서드를 사용하자.
##3. sort 함수를 사용해 리스트를 정렬할 수 있다.
e = [5, 2, 7, 3, 22, 49]
e.sort()
e
#Out: [2, 3, 5, 7, 22, 49]
f = ['a', 'aaa', 'aaaaa', 'aa']
f.sort(key = len)
f
#리스트 e를 문자열 길이 순서대로 정렬한 것
#Out: ['a', 'aa', 'aaa', 'aaaaa']
[3] 사전¶
사전dict은 파이썬에서 가장 중요한 내장 자료 구조 중 하나이다. 해시맵 또는 연관 배열이라고 불리기도 한다.
파이썬 객체인 key와 value로 구성되어 있으며, 둘은 서로 연관되어 있다. key를 통해 연관된 value를 찾는 것이다.
- 사전 생성은 중괄호{}를 사용하며, 콜론으로 키와 값을 구분한다.
dict_1 = {'key1' : 'value1' , 'key2' : 'value2'} dict_1 #Out: {'key1' : 'value1' , 'key2' : 'value2'}
- 새로운 키와 값을 추가할 수 있으며, 키를 통해 값을 알아낼 수 있다.
#키(3)와 값(리스트) 추가 dict_1[3] = [value3, value4] dict_1 #Out: {3 : [value3, value4] , 'key1' : 'value1' , 'key2' : 'value2'} #키로 값 출력 dict_1['key2'] #Out: 'value2'
- in, del 예약어와 pop메서드를 사용할 수 있다.
- keys메서드, values메서드는 각각의 값이 담긴 리스트를 반환. 반환 리스트는 키와 리스트 쌍 순서대로 정렬된다.(각각의 리스트는 순서대로 서로 대응함)
dict_1.keys() dict_1.values() #Out: ['key1', 'key2', 3] # ['value1', 'value2', [value3, value4]] #파이썬3는 리스트 대신 이터레이터를 반환
- update 메서드로 사전을 다른 사전과 통합할 수 있다.
dict_1.update({4 : 'four' , 5 : 'five'}) dict_1 #Out: {3 : [value3, value4] , 'key1' : 'value1' , 'key2' : 'value2', 4 : 'four', 5 : 'five'}
- 사전의 값은 객체 종류가 상관없지만 키는 스칼라형(실수, 정수, 문자열)이나 값이 바뀌지 않는 객체(튜플)만 사용할 수 있다.
이는 키가 해시가 되어야 하기 때문이다. 리스트는 값이 바뀔 수 있으므로 해시가 불가능하다. 해시 가능 여부는 hash()로 확인할 수 있다.
리스트를 키로 사용하기 위해서는 튜플로 변환해주면 된다.d = {} #빈 사전 생성 d[tuple([1, 2, 3])] = 4 #리스트 [1, 2, 3]을 tuple()에 넣어 튜플로 변환해주고, 사전의 키 자리에 대입. 키의 값은 4로 지정 d #Out: {[1, 2, 3] : 4}
'배우는 것 > Maching Learning' 카테고리의 다른 글
#9. 과적합, 과소적합, 일반화, 이전 글에 대한 배경지식 확장 (0) | 2021.12.27 |
---|---|
#8. 최근접 이웃 알고리즘 실습, 이웃의 개수가 지도학습에 미치는 영향 (0) | 2021.12.27 |
#6. 파이썬 기본지식 공부(1) (0) | 2021.12.21 |
#5. 지도학습에서의 과적합화 (0) | 2021.12.20 |
#4. 얼렁뚱땅 주피터로 맛보기학습 (0) | 2021.12.19 |