[Python Study] 2부. Python 자료형 (2/2)
Python 자료형 (2/2)
자료형 첫번째 글을 올리고 두번째 글 올리는데 까지 오래 걸렸네요. 회사에서 간단한 프로젝트가 있어서 그거 처리하느라 노곤노곤... 자 그럼 시작해 볼까요~?
3) 리스트
데이터 형들의 집합을 나타내는 방법이다. 사용하는 방법은 다음과 같다.
>>> a = []
>>> b = [1, 2, 3]
>>> c = ['Life', 'is', 'too', 'short']
>>> d = [1, 2, 'Life', 'is']
>>> e = [1, 2, ['Life', 'is']]
리스트의 인덱싱과 슬라이싱
문자열에서 사용했던 것과 마찬가지로 인덱싱과 슬라이싱을 지원한다. 인덱싱과 슬라이싱을 사용하면 아주 편리하게 리스트를 제어하거나 접근할 수 있다. 간단하게 정리 해보도록 하자.
- index 값을 이용하여 접근가능하다.
-1
은 리스트의 젤 마지막 값을 접근한다.e[-1][0]
형태로 2차원배열도 접근한다.
슬라이싱 역시 문자열과 거의 동일하게 사용이 가능하다.
a[1:2]
와 같이 일부분만 잘라올 수 있다.a[:3], a[2:]
와 같이 시작부터 3번째 까지, 혹은 2번째 부터 마지막까지 자를 수 있다.리스트 더하기도 가능하다
>>> a = [1,2,3] >>> b = [4,5,6] >>> a + b [1,2,3,4,5,6]
a * 3
이라고 사용하면 변수a
에 있는 리스트값이 3번 반복 된다.a[2]=1
과 같이 특정위치의 값을 수정가능하다.a[1:2]=[1,2,3]
특정 위치를 리스트로 대치도 가능하다.- 리스트 삭제 방법
>>> a[1:3] = []
>>> a
[1, 'c', 4]
>>> a
[1, 'c', 4]
>>> del a[1]
>>> a
[1, 4]
리스트 관련 함수들
append(val)
: 리스트에 요소를 추가한다.sort()
: 리스트 정렬reverse()
: 리스트 뒤집기index(val)
: 위치 반환, java 의 indexOf 메소드와 비슷하다고 보면된다.insert( index, value )
: 리스트 삽입remove(val)
: 리스트에 해당값을 제거하기, 제일 처음 하나의 값을 제거한다.pop([val])
: 리스트의 맨 마지막 요소를 끄집어 낸다.count(val)
: 리스트중 val 의 갯수가 몇개있는지 센다.extend([1,2])
: 리스트의 확장 a += [1,2] 와 동일하다.
4) 터플(tuple)
리스트와 유사한 구조지만 몇가지 다른점이 있다. 어떤 다른점이 있는지 다음을 보도록 하자.
- 리스트는
[
과]
으로 둘러싸지만 터플은(
과)
으로 둘러싼다. - 리스트는 그 값을 생성, 삭제, 수정이 가능하지만 터플은 그 값을 변화시킬 수 없다.
>>> t1 = ()
>>> t2 = (1,)
>>> t3 = (1,2,3)
>>> t4 = 1,2,3
>>> t5 = ('a', 'b', ('ab', 'cd'))
리스트와 마찬가지로 인덱스 슬라이싱, 더하기, 곱하기가 가능하지만, 값의 변경은 불가능하다.
5) 딕셔너리 (Dictionary)
딕셔너리는 key=value 쌍을 이루는 데이터 구조라고 이해하면 쉬울것 같다. “이름” = “홍길동”, “생일” = “몇 월 몇 일” 등과 같은 구조로 이루어 진다.
이것은 요즘 나오는 대부분의 언어들도 갖고 있는 자료형으로 Associative array, Hash라고도 불린다.
예) 기본적은 딕셔너리>>> dic = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
딕셔너리 사용하기
Key이용하여 Value얻기
>>> grade = {'pey': 10, 'julliet': 99}
>>> grade['pey']
10
>>> grade['julliet']
99
딕셔너리 쌍 추가, 삭제하기
1) 쌍 추가
>>> a = {1: 'a'}
>>> a[2] = 'b'
>>> a
{2: 'b', 1: 'a'}
>>> a[3] = [1,2,3]
{'name': 'pey', 3: [1, 2, 3], 2: 'b', 1: 'a'}
2) 삭제
>>> del a[1]
>>> a
{'name': 'pey', 3: [1, 2, 3], 2: 'b'}
딕셔너리 주의사상
- 동일한 키값을 가지고 있을때에는 해당 키값으로 접근 할떄 어떤 값(value)가 리턴될지 알 수가 없다.
key
로 이용되는 데이터형에는 리스트는 사용할수 없다. 하지만, 튜플은 가능하다. 즉, 변환 가능한 데이터 타입은 key값으로 사용 할 수 없다고 이해하면 쉬울것 같다.
딕셔너리 함수
Key리스트 만들기(keys)
>>> a = {'name': 'pey', 'phone': '0119993323', 'birth': '1118'}
>>> a.keys()
dict_keys(['name', 'phone', 'birth'])
>>> for k in a.keys():
... print(k)
...
phone
birth
name
※ 파이썬 2.7 버전까지는 a.keys() 호출 시 리턴값으로 dict_keys 가 아닌 list 를 리턴한다. list 를 리턴하기 위해서는 메모리의 낭비가 발생하는데 파이썬 3.0 이후버전에서는 이러한 메모리 낭비를 줄이기 위해서 dict_keys 라는 객체를 리턴하게 되었다. 아래 소개될 dict_values, dict_items 역시 마찬가지로 파이썬 3.0 이후에 추가된 것들이다. 만약 파이썬 2.7에서와 같이 list 가 필요한 경우에는 list(a.keys()) 로 리스트 형태로 변환하여 사용하면 된다. dict_keys, dict_values, dict_items 등은 리스트로 변환하지 않더라도 기본적인 iterate성 구문(예: for문)들을 실행 할 수 있다.
Value리스트 만들기 (values)
>>> a.items()
dict_items([('name', 'pey'), ('phone', '0119993323'), ('birth', '1118')])
Key: Value 쌍 모두 지우기(clear)
>>> a.clear()
>>> a
{}
Key로 Value얻기 (get)
>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> a.get('name')
'pey'
>>> a.get('phone')
'0119993323'
a[key]
로 접근 했을 떄, 해당 키값이 없다면 에러가 발생한다. 하지만 get(key)
로 접근했는데 해당 key 값이 없다면 none
값을 리턴한다.
딕셔너리 내에 찾으려는 키값이 없을 경우 디폴트 값으로 가져오도록 하고 싶을 때에는 get(x, '디폴트값')을 사용하면 편리하다.
해당 Key가 있는지 조사 (in)
>>> a = {'name':'pey', 'phone':'0119993323', 'birth': '1118'}
>>> 'name' in a
True
>>> 'email' in a
False
6) 집합 (Sets)
기본적으로 다음과 같이 set()
함수를 이용하여 만들 수가 있다.
>>> s1 = set([1,2,3])
>>> s1
{1, 2, 3}
>>> s2 = set("Hello")
>>> s2
{'e', 'l', 'o', 'H'}
위 예제에서도 알 수 있듯이 집합(Sets)에는 2가지 특징이 있다.
- 중복을 허용하지 않는다.
- 정렬된 상태로 저장된다.
이런 특징 때문에 리스트의 중복을 제거하기위해 집합이 종종 이용되곤 한다.
교집합, 합집합, 차집합
- 교집합 :
&
orintersection
- 합집합 :
|
orunion
- 차집합 :
-
ordifference
추가와 삭제
add( value )
: 특정 value 만 추가가 가능하다.update( list )
: 특정 list 를 추가가 가능하다.remove( value )
: 특정 value 값을 제거한다.
7) 참과 거짓
python 에서 여러 데이터 타입들이 참과 거짓으로 어떻게 표현되는지 표로 알아 보도록 하자.
값 | 참 or 거짓 |
---|---|
"python" | 참 |
"" | 거짓 |
[1, 2, 3] | 참 |
[] | 거짓 |
() | 거짓 |
{} | 거짓 |
1 | 참 |
0 | 거짓 |
None | 거짓 |
다음 예는 while 문에서 위 내용을 어떻게 이용하는지 직접 예제를 통해서 알아 보도록 하자.
>>> a = [1,2,3,4]
>>> while a:
... a.pop()
...
4
3
2
1
변수에 대해서는 중요한 내용으로 판단되어 다음번에 따로 좀 자세히 다루도록 하겠다.