U E D R , A S I H C RSS

2학기파이선스터디/ 튜플, 사전


1. 1. 튜플


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)에 접근하다.

~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)을 리턴.
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

2.3. 심볼 테이블


globals()를 사용하면 전역 영역(모듈 영역)의 심볼 테이블(사전)을 얻는다.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:13
Processing time 0.0281 sec