1.1. 1. 튜플의 연산 ¶
- 튜플은 리스트와 같은 시퀀스 형이므로 시퀀스 형이 갖는 일반적인 연산을 모두 갖는다 (인덱싱, 슬라이싱, 연결, 반복, 길이 연산 등)
- 튜플은 ()로 표현된다.
- 튜플과 리스트의 차이점은 튜플은 변경 불가능형이라는 것과, 리스트가 갖고 있는 것과 같은 메쏘드(자체 함수)를 갖지 않는다는 것이다.
- 튜플은 ()로 표현된다.
- 튜플과 리스트의 차이점은 튜플은 변경 불가능형이라는 것과, 리스트가 갖고 있는 것과 같은 메쏘드(자체 함수)를 갖지 않는다는 것이다.
~cpp t = () # 공 튜플 t = (1,2,3) t = 1,2,3 # 괄호가 없어도 튜플이됨 r = (1,) r = 1, # r=1로 해석되지 않기 위함 t[0]=100 # 허용 안됨. 에러 발생 * 튜플을 이용하여 좌우변에 복수개의 자료를 치환할 수 있다. >>> x,y,z=1,2,3 * 이를 이용하여 두 변수의 값을 쉽게 치환할 수 있다. >>> x = 1 >>> y = 2 >>> x, y = y, x >>> x, y (2,1)
1.2. 패킹과 언패킹 ¶
튜플 패킹 - 한 튜플 안에 여러 개의 데이터를 넣는 것을 튜플 패킹이라고 한다.
~cpp t = 1,2,'hello'튜플 언패킹 - 반대로, 튜플에서 데이터를 꺼내오는 것을 튜플 언패킹이라고 한다.
~cpp x,y,z = t
* 리스트와 튜플은 상호 변환이 가능하다.
~cpp >>> T = (1,2,3,4,5) >>> L = list(T) >>> L[0] = 100 >>> L [100, 2, 3, 4, 5] >>> T = tuple(L) >>> T (100, 2, 3, 4, 5)
1.3. 튜플을 사용하는 경우 ¶
1. 함수에 있어서 하나 이상의 값을 리턴하는 경우
~cpp
>>> def calc(a,b):
return a+b, a*b
>>> x, y = calc(5, 4)
2. 문자열 포매팅
~cpp
>>> print 'id : %s, name : %s' % ('gslee','GangSeong')
id : gslee, name : GangSeong
3. apply 함수를 사용할 때
~cpp >>> apply(calc, (4,5)) (9,20)
4. 그 이외에 고정된 값을 표현하기 위하여 튜플을 사용한다.
~cpp
>>> d = {'one':1, 'two':2}
>>> d.items()
[('one',1), ('two',2)]
2. 2. 사전 ¶
- 사전은 임의의 객체의 집합적 자료형인데, 자료의 순서를 갖지 않는다.
- 집합적이라는 의미에서 리스트나 튜플과 동일하나, 자료의 순서를 정할 수 없는 매핑(mapping)형이다.
- 매핑형에서는 키(key)를 이용해 값(value)에 접근하다.
- 집합적이라는 의미에서 리스트나 튜플과 동일하나, 자료의 순서를 정할 수 없는 매핑(mapping)형이다.
- 매핑형에서는 키(key)를 이용해 값(value)에 접근하다.
~cpp
>>> dic = {} # dic이라는 이름으로 비어있는 사전을 만든다.
>>> dic['dictionary'] = '1. A reference book containing an alphabetical list of words, ...'
>>> dic['python'] = 'Any of various nonvenomous snakes of the family Pythonidae, ...'
>>> dic['dictionary'] # dic아, ‘dictionary’가 뭐니?
'1. A reference book containing an alphabetical list of words, ...'
~cpp
>>> member = {'basketball' :5, 'soccer':11, 'baseball':9}
>>> member['baseball'] # 검색
9
>>> member['volleyball'] = 7 # 항목 추가
>>> member
{'soccer' : 11, 'volleyball' : 7 'baseball' : 9 , 'basketball' : 5}
>>> len(member)
4
>>> del member['basketball'] # 항목 삭제
* 사전의 순서는 입력값의 종류에 따라서 언제든지 바뀔 수 있다.
이런 구조를 사용하는 이유는 키에 의한 검색속도를 빨리하기 위함이다. < 해쉬 (hash) 용법 >
* 값은 임의의 객체가 될 수 있지만, 키는 변경 불가능(immutable) 자료형이어야 한다. 따라서 문자열, 숫자, 튜플은 키가 될 수 있지만, 리스트, 사전은 키가 될 수 없다.
함수를 키나 값으로 활용할 수도 있다.~cpp
>>> def add(a,b):
return a+b
>>> def sub(a,b):
return a-b
>>> action = {0:add, 1:sub}
>>> action[0](4,5)
9
>>> action[1](4,5)
-1
2.1. 사전 객체의 메소드 ¶
1. D.keys() : 사전에서 키들을 리스트로 리턴
2. D.values() : 값들을 리스트로 리턴
3. D.items() : (key, value) 리스트로 리턴
4. D.has_key(key) : 멤버십 테스트. D가 key를 가지고 있는가 검사. 있으면 참(1), 없으면 거짓(0)을 리턴.
6. D.copy() : 사전 복사
8. D.setdefalut(key , x) : get 과 같으나 값이 존재하지 않을 때 값을 설정 (Dkey = x)
9. D.update(b) : for k in b.keys(): Dk=bk 즉, 사전 b의 아이템들을 D에 추가시킨다.
10. D.popitem() : (키, 값) 튜플을 리턴하고 사전에서 항목을 제거한다.
2. D.values() : 값들을 리스트로 리턴
3. D.items() : (key, value) 리스트로 리턴
4. D.has_key(key) : 멤버십 테스트. D가 key를 가지고 있는가 검사. 있으면 참(1), 없으면 거짓(0)을 리턴.
key in D 와 같다.
5. D.clear() : 사전 D의 모든 아이템 삭제6. D.copy() : 사전 복사
~cpp
>>> a = d # 사전 레퍼런스 복사. (사전 객체는 공유된다)
>>> a = d.copy() # 사전 복사. (별도의 사전 객체가 마련된다.)
>>> phone = {'jack': 232412, 'jim':1111, 'Joseph' : 234632}
>>> p = phone
>>> phone['jack'] = 1234
>>> phone
{'jack': 1234, 'jim':1111, 'Joseph' : 234632}
>>> p
{'jack': 1234, 'jim':1111, 'Joseph' : 234632}
>>> ph = phone.copy()
>>> phone['babo'] = 5324
>>> phone
{'jack': 1234, 'jim':1111, 'Joseph' : 234632, 'babo' : 5324}
>>> ph
{'jack': 1234, 'jim':1111, 'Joseph' : 234632}
7. D.get(key , x) : 값이 존재하면 Dkey 즉 값을 리턴, 아니면 x를 리턴8. D.setdefalut(key , x) : get 과 같으나 값이 존재하지 않을 때 값을 설정 (Dkey = x)
9. D.update(b) : for k in b.keys(): Dk=bk 즉, 사전 b의 아이템들을 D에 추가시킨다.
10. D.popitem() : (키, 값) 튜플을 리턴하고 사전에서 항목을 제거한다.
2.2. 사전을 for문으로 참조하기 ¶
~cpp
>>> D = {'a':1, 'b':2 ,'c':3}
>>> for key in D.keys():
print key, D[key]
b 2
c 3
a 1
* 정렬하기
~cpp
>>> items = D.items()
>>> items.sort()
>>> items
[('a', 1), ('b', 2) , ('c', 3)]
>>> for k,v in items:
print k, v
a 1
b 2
c 3
* 2.2 이상에서 가능
~cpp
>>> D = {'a':1, 'b':2, 'c':3}
>>> for key in D:
print key, D[key]
a 1
c 3
b 2










