python in machine learning (list, dict, tuple)

공부를 하다보니 파이썬의 리스트, 튜플, 딕셔너리의 정의나 용도의 혼란이 오기 시작했다.

그래서 정리하려 한다.

1. 리스트 

a = [1,2,3,4]

리스트를 만들 때는 위에서 보는 것과 같이 대괄호([ ])로 감싸주고 안에 들어갈 값들은 쉼표로 구분해준다.

리스트는 아무것도 포한하지 않는 빈 리스트일 수도 있고. 리스트 자체를 그 요소로 가질 수도 있다. 즉, 리스트 내에는 어떠한 자료형도 포함시킬 수 있다.

리스트 인덱싱

기본적인 것은 c 언어와 동일하다.

하지만 만약 a= [1,2,3,[4,5,6]] 처럼 리스트 안의 리스트를 갖는 리스트가 존재할 때,

a[3] 의 값은 [4,5,6]이다.

a[3][1] 의 값은 5 이다.

데이터 핸들링 할 때 많이 쓰이는 것이 a[-1] 이다.
a[-1]은 배열의 마지막 값을 가진다.

리스트 슬라이싱

a= "12345" 일 때, a[:2]의 값은 '12'이다. 파이썬은 문자열이 배열 안에 들어가면
자동적으로 슬라이싱된다.

a=[1,2,3,4,5] 일 때, a[:]는 12345 모두 출력된다.

슬라이싱에는 : 와 문자열 다루는 법이 c언어와 다르다.

리스트를 더하고 반복하기

a= [1,2,3] 일 때, a*3 의 값은 a=[3,6,9] 가 아니라

a = [1,2,3,1,2,3,1,2,3] 의 값인 반복을 뜻한다.

더하기는 c언어와 같다.

리스트 관련 함수들

append
sort
reverse
index
insert
remove
pop : 히스트의 맨 마지막 요소를 돌려주고 그 요소는 삭제한다.
count
extend


2. 튜플

리스트는 [] 지만 튜플은 () 이다.
리스트는 그 값을 생성, 삭제,수정이 가능하지만 튜플은 그 값을 변화시킬 수 없다.

덧셈과 곱셈은 되는데, 뺄셈과 나눗셈은 사용할 수 없고(unsupported operand types), list처럼 index를 변경할 수 있는 메소드 - append(), extend(), insert(), remove(), and pop()가 없다. 오직, tuple은 새로운 tuple를 만드는 slicing만 할 수 있다.
[장점] 1. 반복자를 사용할 수 있고 list보다 빠르다. "반복자"를 사용할 때 list대신에 tuple을 사용할 수 있다. 2. 코드 안정성: "Write-protect"데이타로 변경할 필요가 없는 "코드 안정성"을 높일 수 있다. 3. Dictionary keys 사용: tuple는 문자, 숫자, 다른 tuple를 포함한 Dictionary keys을 사용할 수 있다. (list는 변경할 수 있기 때문에 Dictionary key로 사용할 수 없다.) (출처: https://wikidocs.net/15 댓글)

왠만한 생성 과정은 리스트와 같지만 수정이 불가능하다.

1. 튜플의 요소를 지우려고 할 떄
>>> del t1[0]
Traceback (innermost last):
File "", line 1, in ?del t1[0]
TypeError: object doesn't support item deletion

2. 튜플 요소 값 변경시 에러
>>> t1[0] = 'c'
Traceback (innermost last):
File "", line 1, in ?t1[0] = 'c'
TypeError: object doesn't support item assignment


3. 딕셔너리

‘사람’을 예로 들면 누구든지 “이름” = “홍길동”, “생일” = “몇 월 며칠” 등으로 구분할 수 있다. 파이썬은 영리하게도 이러한 대응관계를 자료형으로 만들었다. 이것은 요즘 나오는 대부분의 언어들도 갖고 있는 자료형으로 Associative array, Hash라고도 불린다.
딕셔너리는 리스트나 터플처럼 순차적으로(sequential) 해당 요소 값을 구하지 않고 key를 통해 value를 얻는다. 딕셔너리의 가장 큰 특징이라면 key로 value를 얻어낸다는 점이다. baseball이란 단어의 뜻을 찾기 위해서 사전의 내용을 순차적으로 모두 검색하는 것이 아니라 baseball이라는 단어가 있는 곳만을 펼쳐보는 것이다.
예를 들면,  
>>> dic = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
처럼 키를 갖고 값을 갖는다. 괄호는 {} 를 사용한다.
약간 c 언어의 구조체 느낌이 나기도 한다.

딕셔너리 쌍 추가, 삭제

1) 추가
>>> a = {1: 'a'}
>>> a[2] = 'b'
>>> a
{2: 'b', 1: 'a'}
2) 추가 2
>>> a[3] = [1,2,3]
{'name': 'pey', 3: [1, 2, 3], 2: 'b', 1: 'a'}
3) 삭제
>>> del a[1]
>>> a
{'name': 'pey', 3: [1, 2, 3], 2: 'b'}

주의 사항

1. 키값은 고유 값이므로 중복되는 값을 설정하면 앞서 썼던 키값이 무시된다.
2. 키에 리스트는 쓸 수 없다.

딕셔너리 관련 함수

keys : key 리스트 만들기
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> a.keys()
dict_keys(['name', 'phone', 'birth'])
>>> list(a.keys())
['phone', 'birth', 'name']

values : value 리스트 만들기
>>> a.values()
dict_values(['pey', '0119993323', '1118'])

items : key, value 쌍 얻기
>>> a.items()
dict_items([('name', 'pey'), ('phone', '0119993323'), ('birth', '1118')])

get : key 로 value 얻기
>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> a.get('name')
'pey'
>>> a.get('phone')
'0119993323' 

in : 해당 key 가 있는지 조사
>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> 'name' in a
True
>>> 'email' in a
False

출처 : 점프 투 파이썬 (https://wikidocs.net)

댓글

이 블로그의 인기 게시물

윈도우 설치에서 파티션 설정 오류(NTFS)

[exploit writing] 1_스택 기반 오버플로우 (1) First

하둡 설치 오류 정리