Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

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

From ZeroWiki

1. 튜플

1. 튜플의 연산

  • 튜플은 리스트와 같은 시퀀스 형이므로 시퀀스 형이 갖는 일반적인 연산을 모두 갖는다 (인덱싱, 슬라이싱, 연결, 반복, 길이 연산 등)
  • 튜플은 ()로 표현된다.
  • 튜플과 리스트의 차이점은 튜플은 변경 불가능형이라는 것과, 리스트가 갖고 있는 것과 같은 메쏘드(자체 함수)를 갖지 않는다는 것이다.
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)


패킹과 언패킹

튜플 패킹 - 한 튜플 안에 여러 개의 데이터를 넣는 것을 튜플 패킹이라고 한다.

t = 1,2,'hello'

튜플 언패킹 - 반대로, 튜플에서 데이터를 꺼내오는 것을 튜플 언패킹이라고 한다.

x,y,z = t
  • 리스트와 튜플은 상호 변환이 가능하다.
>>> 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. 함수에 있어서 하나 이상의 값을 리턴하는 경우
>>> def calc(a,b):
          return a+b, a*b
>>> x, y = calc(5, 4)
  1. 문자열 포매팅
>>> print 'id : %s, name : %s' % ('gslee','GangSeong')
id : gslee, name : GangSeong
  1. apply 함수를 사용할 때
>>> apply(calc, (4,5))
(9,20)
  1. 그 이외에 고정된 값을 표현하기 위하여 튜플을 사용한다.
>>> d = {'one':1, 'two':2}
>>> d.items()
[('one',1), ('two',2)]

2. 사전

  • 사전은 임의의 객체의 집합적 자료형인데, 자료의 순서를 갖지 않는다.
  • 집합적이라는 의미에서 리스트나 튜플과 동일하나, 자료의 순서를 정할 수 없는 매핑(mapping)형이다.
  • 매핑형에서는 키(key)를 이용해 값(value)에 접근하다.
>>> 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, ...'
>>> 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) 자료형이어야 한다.
 따라서 문자열, 숫자, 튜플은 키가 될 수 있지만, 리스트, 사전은 키가 될 수 없다. 


함수를 키나 값으로 활용할 수도 있다.

>>> 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

사전 객체의 메소드

  1. D.keys() : 사전에서 키들을 리스트로 리턴
  2. D.values() : 값들을 리스트로 리턴
  3. D.items() : (key, value) 리스트로 리턴
  4. D.has_key(key) : 멤버십 테스트. D가 key를 가지고 있는가 검사. 있으면 참(1), 없으면 거짓(0)을 리턴.
                   key in D 와 같다.
  1. D.clear() : 사전 D의 모든 아이템 삭제
  2. D.copy() : 사전 복사
>>> 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}
  1. D.get(key , x) : 값이 존재하면 D[key] 즉 값을 리턴, 아니면 x를 리턴
  2. D.setdefalut(key , x) : get 과 같으나 값이 존재하지 않을 때 값을 설정 (D[key] = x)
  3. D.update(b) : for k in b.keys(): D[k]=b[k] 즉, 사전 b의 아이템들을 D에 추가시킨다.
  4. D.popitem() : (키, 값) 튜플을 리턴하고 사전에서 항목을 제거한다.

사전을 for문으로 참조하기

>>> D = {'a':1, 'b':2 ,'c':3}
>>> for key in D.keys():
        print key, D[key]

b 2 
c 3
a 1


  • 정렬하기
>>> 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 이상에서 가능
>>> D = {'a':1, 'b':2, 'c':3}
>>> for key in D:
        print key, D[key]

a 1 
c 3
b 2

심볼 테이블

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


2학기파이선스터디