[파이썬 기초] 3. List와 Dictionary
오늘은 List와 Dictionary에 대해 알아보겠습니다.
이전에 알아본 변수는 하나의 값만 담을 수 있었죠. List와 dictionary는 여러 개의 데이터를 담을 수 있는 변수라고 볼 수 있습니다.
코딩을 하면 다양한 값들을 저장하고 사용하게 됩니다. 그렇기 때문에 list와 dictionary는 빠질 수 없는 요소 중 하나라고 볼 수 있죠. List와 dictionary에 대해 알아보고 어떻게 쓰면 좋을지 생각해 봅시다.
1. List
1.1. List 구현과 인덱스
1.2. List 관련 명령어
2. Dictionary
1. List
1.1. List 구현과 인덱스
List는 여러 개의 값을 담을 수 있는 변수입니다. 리스트는 대괄호를 이용해 여러 값들을 담을 수 있습니다. 리스트 정의는 아래와 같이 할 수 있습니다.
a = [1, 2, 3, 4, 5]
위 코드를 보면 구현법이 변수와 크게 다르지 않습니다. 대괄호를 사용해 그 안에 값들을 여러 개 넣으면 됩니다.
다른 프로그래밍 언어와 파이썬 리스트의 차이점이라면, 파이썬은 리스트 안에 다양한 자료형의 데이터를 넣을 수 있습니다.
list_a = [-5, 1.25, "Hello", "한글", False]
한 발 더 나가자면 리스트 안에 리스트를 넣는 것도 가능합니다.
list_a = [[1,2,3], [4,5,6], [7,8,9]]
list_b = [[1,2], ['a','b','c'], [4, 6, 9, 10, 12]]
이렇게 리스트 안에 리스트가 담기는 것을 이중배열이라고 하며, 파이썬에선 리스트 안의 리스트끼리 길이가 달라도 되고, 다른 자료형들과 섞여도 상관이 없습니다.
리스트의 개별 값에 접근하는 방법은 리스트의 인덱스값을 이용하면 됩니다. 인덱스 값이란 리스트의 각 데이터에 부여되는 번호 같은 겁니다. 인덱스는 맨 앞의 데이터부터 0, 1, 2, 3... 순으로 부여됩니다.
list_b = [5, 10, 15, 20]
print(list_b[0]) # 5
print(list_b[1]) # 10
print(list_b[2]) # 15
print(list_b[3]) # 20
위와 같이 대괄호 안에 인덱스 번호를 넣어서 리스트 안의 값들을 확인할 수 있습니다.
혹은 음수 인덱스를 이용해 뒤의 값에 접근하는 것도 가능합니다. 리스트의 맨 뒷 값부터 -1, -2, -3... 순으로 인덱스가 부여됩니다.
list_b = [5, 10, 15, 20]
print(list_b[-1]) # 20
print(list_b[-2]) # 15
print(list_b[-3]) # 10
print(list_b[-4]) # 5
이중 배열일 경우 인덱스는 아래와 같이 사용할 수 있습니다.
list_A = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(list_A[0][2]) # 3
print(list_A[1][2]) # 6
print(list_A[2][1]) # 8
리스트 안의 리스트에도 인덱스가 똑같이 부여되며, 대괄호 옆에 대괄호를 하나 더 사용함으로써 인덱스 접근이 가능합니다.
이를 이용해 리스트의 특정 인덱스의 값을 수정하는 것도 가능합니다.
list_a = [3, 6, 9, 12]
list_a[2] = 18
print(list_a) # [3, 6, 18, 12]
리스트는 슬라이싱을 이용해 특정 범위의 값들을 한번에 조회하는 것도 가능합니다.
list_a = [2, 4, 6, 8, 10]
print(list_a[1:3]) # [4, 6]
슬라이싱은 위와 같이 쓸 수 있습니다. ":"를 기준으로 왼쪽의 숫자가 시작 인덱스, 오른쪽의 숫자가 끝 인덱스입니다. 중요한 것은 시작 인덱스의 인덱스 값은 포함하지만, 끝 인덱스의 인덱스 값은 포함하지 않습니다.
무슨 말이냐면 위와 같이 [1:3]으로 표기했을 경우, [1, 2]번 인덱스의 값만 조회됩니다. 3번 인덱스 값까지 조회하고 싶다면 [1:4]로 써야 하는거죠.
만약 슬라이싱 인덱스의 범위를 표기하지 않는다면 자동으로 시작 인덱스는 맨 첫번째 값으로, 끝 인덱스는 맨 끝 값으로 설정됩니다.
list_a = ['a', 'b', 'c', 'd', 'e']
# 시작 인덱스를 표기 안하면 0부터 시작
print(list_a[:3]) # ['a', 'b', 'c']
# 끝 인덱스를 표기 안하면 마지막 요소까지
print(list_a[2:]) # ['c', 'd', 'e']
1.2. List 관련 명령어
List에서만 사용 가능한 명령어가 있어서 몇 개 알려드리겠습니다.
List의 요소값들이 모두 int, float으로 이뤄진 경우 총합, 최솟값, 최댓값을 쉽게 찾을 수 있습니다.
a = [1, 2, 3, 4, 5]
print(sum(a)) # 15
print(min(a)) # 1
print(max(a)) # 5
sum() 명령어를 쓰면 리스트 값들의 총합을 계산할 수 있습니다.
min()과 max()는 각각 리스트의 최솟값과 최댓값을 찾는 명령어입니다.
len() 명령어를 통해 리스트의 길이도 알 수 있습니다.
b = [2, 4, 7, 11]
print(len(b)) # 4
이를 활용하면 리스트 값들의 평균값도 계산이 가능하겠죠?
b = [2, 4, 6, 10]
avg = sum(b)/len(b)
print(avg) # 5.5
.append() 명령어를 통해 리스트의 끝에 새로운 값을 추가하는 것도 가능합니다.
a = [1, 2, 3, 4, 5]
a.append(7)
print(a) # [1, 2, 3, 4, 5, 7]
혹은 리스트간에 덧셈을 사용하면 두 개의 리스트를 합치는 것도 가능합니다.
a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
c = a + b
print(c) # [1, 2, 3, 4, 5, 6, 7, 8]
이를 이용해서 만약 리스트 중간에 새로운 값을 추가하고 싶다면 슬라이싱과 리스트 덧셈을 활용해서 할 수 있겠죠.
a = [1, 2, 4, 5]
b = a[:2] + [3] + [2:]
print(b) # [1, 2, 3, 4, 5]
반대로 리스트에서 값을 빼고 싶다면 del 명령어나 슬라이싱을 사용하면 됩니다.
a = [1, 2, 3, 4, 5, 6]
del a[-1]
print(a) # [1, 2, 3, 4, 5]
a = a[:-1]
print(a) # [1, 2, 3, 4]
2. Dictionary
Dictionary도 리스트와 같이 여러 개의 데이터를 담는 자료형입니다. 리스트와의 차이점은 리스트는 인덱스 값이 숫자로 자동 부여되는 것과 달리 dictionary는 인덱스 이름을 직접 부여한다는 것입니다.
dict_A = {'소연': '010-xxxx-xxxx', '민수': '011-000-0000'}
print(dict_A['소연']) # '010-xxxx-xxxx'
print(dict_A['민수']) # '011-000-0000'
Dictionary는 중괄호를 이용해 표시합니다. dictionary는 key와 value 값이 존재하며, ":"를 기준으로 앞에는 key 값을, 뒤에는 value 값을 씁니다.
Dictionary에서 원하는 value 값에 접근하기 위해선 key값을 이용하는 겁니다. 즉, key 값이 리스트의 인덱스와 같은 역할을 하는 것입니다. 위 코드를 보면 dict_A는 '소연'과 '민수'라는 key값을 갖습니다. dict_A의 '소연' key 값에 접근하면(dict_A['소연']) 그 key 값에 속하는 value값 '010-xxxx-xxxx'이 출력됩니다.
key 값은 문자열, 숫자 모두 가능합니다. value 값은 문자열, 숫자, 리스트 모두 가능합니다.
test_score = {'john': [70, 92, 85], 'tom': [81, 75, 60], 'fred': [80, 99, 87]}
만약 새로운 값을 dictionary에 추가하고 싶다면 새로운 key값에 새로운 value를 할당해 주면 됩니다. 반대로 특정 값을 지우고 싶다면 del 명령어를 사용하면 됩니다.
test_score = {'john': [70, 92, 85], 'tom': [81, 75, 60], 'fred': [80, 99, 87]}
test_score['katie'] = [88, 91, 100]
print(test_score) # {'john': [70, 92, 85], 'tom': [81, 75, 60], 'fred': [80, 99, 87], 'katie': [88, 91, 100]}
del test_score['john']
print(test_score) # {'tom': [81, 75, 60], 'fred': [80, 99, 87], 'katie': [88, 91, 100]}
또, .keys(), .values() 명령어를 통해 dictionary에 속한 key값, value값들을 출력할 수도 있습니다.
test_score = {'john': [70, 92, 85], 'tom': [81, 75, 60], 'fred': [80, 99, 87]}
print(test_score.keys()) # dict_keys(['john', 'tom', 'fred'])
print(test_score.values()) # dict_keys([[70, 92, 85], [81, 75, 60], [80, 99, 87]])
이렇게 list와 dictionary에 대해 알아봤습니다. list와 dictionary에 다양한 값들을 저장해보면서 연습해 보시면 좋을 것 같습니다. 다음 시간에 조건문과 반복문까지 알아본 뒤에 본격적으로 코딩을 시작해 보도록 하겠습니다. 감사합니다.