08 Sep 2017 » python

2017-09-08-python_3

List와 Dictionary에 대해 알아보자.


아래 코드를 보면서 List를 이해하자.

In [1]:
# -*- coding: utf-8 -*-

ten_things = "Apple Oranges Crows Telephone Light Sugar"

print("잠깐 아직 목록에 10개가 들어 있지 않으니 한 번 고쳐 보자.")

# space bar 1칸을 공백으로 split
stuff = ten_things.split(' ')
more_stuff = ["Day", "Night", "Song", "Frisbee", "Corn", "Banana", "Girl", "Boy"]

# stuff 원소가 10개가 되면 loop를 멈춰라
while len(stuff) != 10:
    # pop()은 가장 마지막 원소를 뱉고, 그 원소는 리스트에서 빠진다.
    next_one = more_stuff.pop()
    print("추가: ", next_one)
    stuff.append(next_one)
    print("이제 {} 항목이 있습니다.".format(len(stuff)))

print("한 번 볼까요!", stuff)

print(stuff[1])
print(stuff[-1]) # 워어! 복잡해
print(stuff.pop())

# stuff라는 리스트의 엘리먼트를 스페이스 공백으로 연결해라.
print(' '.join(stuff)) # 뭐? 멋져!

# stuff라는 리스트의 3,4 엘리먼트를 '#'으로 연결해라.
print('#'.join(stuff[3:5])) # 엄청나구나!
잠깐 아직 목록에 10개가 들어 있지 않으니 한 번 고쳐 보자.
추가:  Boy
이제 7 항목이 있습니다.
추가:  Girl
이제 8 항목이 있습니다.
추가:  Banana
이제 9 항목이 있습니다.
추가:  Corn
이제 10 항목이 있습니다.
한 번 볼까요! ['Apple', 'Oranges', 'Crows', 'Telephone', 'Light', 'Sugar', 'Boy', 'Girl', 'Banana', 'Corn']
Oranges
Corn
Corn
Apple Oranges Crows Telephone Light Sugar Boy Girl Banana
Telephone#Light

pop

pop( )은 가장 마지막(최근에 들어온) 엘리먼트를 뱉고, 그 원소는 리스트에서 빠진다.

다음을 보면서 이해하자.

In [2]:
more_stuff = ["Day", "Night", "Song", "Frisbee", "Corn", "Banana", "Girl", "Boy"]
more_stuff
Out[2]:
['Day', 'Night', 'Song', 'Frisbee', 'Corn', 'Banana', 'Girl', 'Boy']
In [3]:
more_stuff.pop()
Out[3]:
'Boy'
In [4]:
more_stuff
Out[4]:
['Day', 'Night', 'Song', 'Frisbee', 'Corn', 'Banana', 'Girl']
In [5]:
more_stuff.pop()
Out[5]:
'Girl'
In [6]:
more_stuff
Out[6]:
['Day', 'Night', 'Song', 'Frisbee', 'Corn', 'Banana']
In [7]:
more_stuff.pop()
Out[7]:
'Banana'
In [8]:
more_stuff
Out[8]:
['Day', 'Night', 'Song', 'Frisbee', 'Corn']

split과 join

아래의 예처럼 사용하므로 사용법을 익혀두자.

In [9]:
ten_things = "Apple Oranges Crows Telephone Light Sugar"
ten_things
Out[9]:
'Apple Oranges Crows Telephone Light Sugar'
In [10]:
stuff = ten_things.split(' ')
stuff
Out[10]:
['Apple', 'Oranges', 'Crows', 'Telephone', 'Light', 'Sugar']
In [11]:
re = ' '.join(stuff)
re
Out[11]:
'Apple Oranges Crows Telephone Light Sugar'

Dictionary(사전)

세상에서 가장 유용한 container!!

간단한 예를 살펴 보자.

In [12]:
info = {'name':'Zed', 'age':36, 'height':6*12 +2}
In [13]:
info
Out[13]:
{'age': 36, 'height': 74, 'name': 'Zed'}

dict의 인덱싱

In [14]:
info['age']
Out[14]:
36
In [15]:
info['height']
Out[15]:
74
In [16]:
info['name']
Out[16]:
'Zed'

자료를 넣는 것도 아래처럼 직관적이며, 간단하다.

In [17]:
info
Out[17]:
{'age': 36, 'height': 74, 'name': 'Zed'}
In [18]:
info['city'] = 'San Francisco'
In [19]:
info
Out[19]:
{'age': 36, 'city': 'San Francisco', 'height': 74, 'name': 'Zed'}
In [20]:
# 아래처럼 문자열 대신 숫자도 key값으로 추가가 가능하다.
info[1] = 'Wow'
info[2] = 'Kaka'
In [21]:
info
Out[21]:
{'name': 'Zed',
 'age': 36,
 'height': 74,
 'city': 'San Francisco',
 1: 'Wow',
 2: 'Kaka'}

Dict에서 자료 삭제는 del을 사용한다.

In [22]:
del info[1]
info
Out[22]:
{'name': 'Zed', 'age': 36, 'height': 74, 'city': 'San Francisco', 2: 'Kaka'}
In [23]:
del info[2]
info
Out[23]:
{'age': 36, 'city': 'San Francisco', 'height': 74, 'name': 'Zed'}

아래 코드를 리뷰해 보자.

In [24]:
# -*- coding: utf-8 -*-

# 도 이름에서 약자로의 mapping을 만든다.
states = {
    '충청북도': '충북',
    '경상북도': '경북',
    '전라남도': '전남',
    '경기도': '경기',
    '강원도': '강원'
}

# 기본적인 도와 도시 묶음을 만들자.
cities = {
    '전남': '광주',
    '강원': '원주',
    '경북': '대구'
}

# 도시 몇 개를 더 써보자.
cities['경기'] = '수원'
cities['충북'] = '충주'

# 도시를 출력
print('-' * 10)
print("경기도에는", cities['경기'])
print("충청북도에는", cities['충북'])

# 도를 출력
print('-' * 10)
print("강원도의 약자는", states['강원도'])
print("경상북도의 약자는", states['경상북도'])

# 도 이름 사전과 도시 사전을 차례로 써보자.
print('-' * 10)
print("강원도에는", cities[states['강원도']])
print("경상북도에는", cities[states['경상북도']])

# 도 이름 약자를 모두 출력
print('-' * 10)
for state, abbrev in states.items():
    print("{}의 줄임말은 {}입니다.".format(state, abbrev))

# 도에 있는 도시를 모두 출력해 보자.
print('-' * 10)
for abbrev, city in cities.items():
    print("{}에는 {}시가 있습니다.".format(abbrev, city))

# 둘을 한 번에 해보자.
print('-' * 10)
for state, abbrev in states.items():
    print("{}의 줄임말은 {}이고 {}시가 있습니다.".format(state, abbrev, cities[abbrev]))

print('-' * 10)
# 없을 수도 있는 도 이름 약자를 안전하게 받아 오자.
state = states.get('제주도', None)

if not state:
    print("제주도는 없습니다.")

# 도시를 기본값을 넣고 가져오자.
city = cities.get('제주', '없습니다.')
print("제주의 시는 {}".format(city))
----------
경기도에는 수원
충청북도에는 충주
----------
강원도의 약자는 강원
경상북도의 약자는 경북
----------
강원도에는 원주
경상북도에는 대구
----------
충청북도의 줄임말은 충북입니다.
경상북도의 줄임말은 경북입니다.
전라남도의 줄임말은 전남입니다.
경기도의 줄임말은 경기입니다.
강원도의 줄임말은 강원입니다.
----------
전남에는 광주시가 있습니다.
강원에는 원주시가 있습니다.
경북에는 대구시가 있습니다.
경기에는 수원시가 있습니다.
충북에는 충주시가 있습니다.
----------
충청북도의 줄임말은 충북이고 충주시가 있습니다.
경상북도의 줄임말은 경북이고 대구시가 있습니다.
전라남도의 줄임말은 전남이고 광주시가 있습니다.
경기도의 줄임말은 경기이고 수원시가 있습니다.
강원도의 줄임말은 강원이고 원주시가 있습니다.
----------
제주도는 없습니다.
제주의 시는 없습니다.

states.items( )

아래의 예를 보고 이 method 사용법을 익혀보자.

In [25]:
states
Out[25]:
{'강원도': '강원', '경기도': '경기', '경상북도': '경북', '전라남도': '전남', '충청북도': '충북'}
In [26]:
states.items()
Out[26]:
dict_items([('충청북도', '충북'), ('경상북도', '경북'), ('전라남도', '전남'), ('경기도', '경기'), ('강원도', '강원')])

states.items( ) 메소드는 key와 value를 (key, value)의 튜플로 변환시켜준다.

for 문에 dict를 함께 돌릴 때, 사용하도록 하자!


list와 dict 언제 무엇을 써야 할까?

리스트

  • 항목을 담으며, 순서가 있는 구조로 정리함

사전

  • 키를 값으로 자료를 mapping 함
  1. 이름, 주소 등 key가 될 만한 식별자를 이용해 value를 꺼내야할 때 → dict
  2. 순서를 지키지 않아도 될때 → dict
    • 순서를 지켜야 하면 리스트를 사용
  3. key와 value를 함께 넣거나 뺄 때 → dict와 del을 사용

즉, 숫자가 아닌 key를 써야하면 딕셔너리를, 순서를 지켜야 하면 리스트를 쓰자!


Reference

  • 깐깐하게 배우는 파이썬


Related Posts