오늘은 알고리즘 문제를 풀어오며 머리속에 둥둥 떠다니던 리스트와 딕셔너리의 개념을 확실히 정립하고 넘어가고자 포스팅을 작성해보려고 한다.
리스트와 딕셔너리 각각의 개념을 예시와 함께 정리하고, 이 둘의 차이와 활용 방법, 더 나아가 리스트와 딕셔너리를 어떻게 조합해서 쓸 수 있을까 까지 정리해보겠다 😋
✏️ 리스트란?
여러 가지 값을 순서대로 저장할 수 있는 데이터 구조이다.
a = [1, 5, 2]
b = [3, "a", 6, 1]
c = []
d = list()
같은 자료형도 들어갈 수 있고, 다른 자료형도 들어갈 수 있다.
또한 리스트의 길이는 len() 함수를 사용해서 잴 수 있다.
a = [1, 5, 2]
print(len(a)) # 출력값: 3
b = [1, 3, [2, 0], 1]
print(len(b)) # 출력값: 4
맨 처음 말한 것 처럼, 순서가 있기 때문에 문자열에서처럼 ('') 인덱싱과 슬라이싱을 사용할 수 있다!
a = [1, 3, 2, 4]
print(a[3]) # 출력값: 4
print(a[1:3]) # 출력값: [3, 2]
print(a[-1]) # 출력값: 4 (맨 마지막 것)
리스트의 요소가 리스트라면? 중첩해서 사용할 수도 있다.
a = [1, 2, [2, 3], 0]
print(a[2]) # [2, 3]
print(a[2][0]) # 2 (a[2] 요소인 [2, 3] 리스트에서 0번째 요소를 출력하라는 뜻)
리스트의 활용
1. 기존의 리스트에 요소 덧붙이기
a = [1, 2, 3]
a.append(5) # 5 덧붙이셈
print(a) # [1, 2, 3, 5]
a.append([1, 2])
print(a) # [1, 2, 3, 5, [1, 2]]
# 더하기 연산과 비교!
a += [2, 7]
print(a) # [1, 2, 3, 5, [1, 2], 2, 7]
리스트는 변경 가능한 (mutable) 데이터 구조다. 그러므로 요소를 추가하거나 삭제하거나 수정할 수 있다.
위의 예제는 append() 라는 메서드를 사용해서 리스트를 변경해 본 예제다. (pop(), remove() 등 사용 가능)
변경 가능, 변경 불가능한 구조의 차이는 일전에 작성해 둔 포스팅을 첨부해두겠다 :-)
👉변수의 mutable과 immutable 구조의 차이
위의 예제에서 주의할 점은 # 더하기 연산과 비교 부분이다.
# 더하기 연산과 비교!
a += [2, 7]
print(a) # [1, 2, 3, 5, [1, 2], 2, 7]
더하기 연산으로 리스트 자체는 추가할 수 있지만, 리스트가 그대로 추가되는 것이 아니라 리스트의 각 요소가 개별적으로 추가된다. 즉, 두 리스트가 연결되는 것이 아니라! 한 리스트의 요소들이 다른 리스트에 추가된다고 생각하면 된다.
# 위의 연산과 비교!
a += [[2, 7]]
print(a) # [1, 2, 3, 5, [1, 2], [2, 7]]
만약 위 코드에서 a.append([2, 7]) 과 같이 리스트로 추가해주고 싶다면 위처럼 적으면 됨 ㅎ
만약 요소를 추가하고 싶다고 더하기 연산으로 리스트가 아닌 정수를 추가해주게 되면 👉 에러난다.
파이썬에서 리스트에 다른 리스트를 더하는 건 (+) 가능하지만, 정수를 더하는 건 파이썬에서 이 연산 자체를 이해하지 못한다.
2. 정렬하기
a = [2, 5, 3]
a.sort()
print(a) # [2, 3, 5]
a.sort(reverse=True)
print(a) # [5, 3, 2]
파이썬에서 sort() 메서드를 통해 리스트를 정렬할 수 있다. 디폴트값은 오름차순이다.
내림차순으로 정렬하고 싶다면? 위의 예제처럼 reverse=True 옵션을 사용하면 된다 ㅎ
3. 요소가 리스트 안에 있는지 알아보기
a = [2, 1, 4, "2", 6]
print(1 in a) # True
print("1" in a) # False
print(0 not in a) # True
리스트의 활용 방법은 이것 말고도 무궁무진하다. 보면 볼수록 재밌는 구조다.
✏️ 딕셔너리 (dictionary) 란?
딕셔너리는 key와 value의 쌍으로 이루어진 자료의 모임이다.
전화번호부에서 이름을 입력하면, 전화번호가 나오는 것과 동일하다.
person = {"name":"Bob", "age": 21}
print(person["name"]) # 출력값: Bob
여기서 key는 name, age이고 value는 Bob과 21이다. (Bob은 문자이므로 "" 처리)
딕셔너리의 요소에는 순서가 없기 때문에, 리스트와는 달리 인덱싱을 사용할 수 없다.
person = {"name":"Bob", "age": 21}
print(person[0]) # 0이라는 key가 없으므로 KeyError 발생!
딕셔너리 어케 만드나요
딕셔너리를 만드는 데는 여러가지 방법이 있다. 기본적으로 중괄호 '{}'를 사용한다.
my_dict = {key1: value1, key2: value2, key3: value3, ...}
a = {"one":1, "two":2}
# 빈 딕셔너리 만들기
a = {}
a = dict()
딕셔너리의 활용
1. 딕셔너리의 값 업데이트하기
person = {"name": "Bob", "age": 21}
person["name"] = "Robert"
print(person) # {'name': 'Robert', 'age': 21} (name 값이 Robert로 바뀜)
2. 새로운 쌍의 자료 넣기
person = {"name": "Bob", "age": 21}
person["height"] = 174.8
print(person) # {'name': 'Bob', 'age': 21, 'height': 174.8} (height 값이 추가됨)
3. 다른 딕셔너리를 넣을 수도 있음
person = {"name": "Alice", "age": 16, "scores": {"math": 81, "science": 92, "Korean": 84}}
print(person["scores"]) # {'math': 81, 'science': 92, 'Korean': 84}
print(person["scores"]["science"]) # 92
✏️ 리스트와 딕셔너리의 조합
딕셔너리는 리스트와 함께 쓰면서 자료를 정리하는 데 쓰일 수 있다.
people = [{'name': 'bob', 'age': 20}, {'name': 'carry', 'age': 38}]
print( people[0]['name'] ) # 출력값: 'bob'
print( people[1]['name'] ) # 출력값: 'carry'
person = {'name': 'john', 'age': 7}
people.append(person)
print(people)
# people의 값은? [{'name':'bob','age':20}, {'name':'carry','age':38}, {'name':'john','age':7}]
print(people[2]['name']) # 출력값: 'john'
간단 연습 !!!!
people = [
{'name': 'bob', 'age': 20, 'score':{'math':90,'science':70}},
{'name': 'carry', 'age': 38, 'score':{'math':40,'science':72}},
{'name': 'smith', 'age': 28, 'score':{'math':80,'science':90}},
{'name': 'john', 'age': 34, 'score':{'math':75,'science':100}}
]
위의 people 리스트에서 smith의 science 점수를 출력해보자!
아래 '정답' 텍스트를 클릭하면 정답이 보인다.
정답
print(people[2]['score']['science'])
✏️ 정리
이렇게 리스트와 딕셔너리에 대해 정리해봤다.
짧게 요약하면,
[리스트] 는 순서가 있는 데이터 구조로, 여러 다양한 자료형의 값을 저장할 수 있고, 요소의 추가, 삭제, 수정이 가능하다.
{딕셔너리} 는 key와 value의 쌍으로 이루어진 자료구조로, 순서가 없으며, 특정 key를 통해 value에 접근한다!
'Programming Languages > Python' 카테고리의 다른 글
[Python] 파이썬에서의 집합, set 함수 (4) | 2024.08.12 |
---|---|
[Python] 파이썬에서 최소 공배수 함수로 구하기 (0) | 2024.06.13 |
[Python] 리스트 append 와 extend의 차이 (2) | 2024.05.14 |
[Python] 알고리즘 문제 풀다 발견한 대소문자 바꾸기 메서드.. 우리의 시간을 아끼자 ^ㅡ^ (0) | 2024.05.13 |
[Python] 변수의 mutable과 immutable의 차이 (1) | 2024.04.20 |