콘텐츠로 이동

리스트, 딕셔너리

글 목록

페이지 제목을 리스트, 딕셔너리 라고 지었지만, 이는 파이썬 용어고 실제로는 여러 값들을 담아놓을 수 있는 자료구조에 대해 다룰 것이다. 자료구조 안에 들어있는 값들은 순서(인덱스) 혹은 이름(키)을 통해 접근 가능하고, 자료구조에 새로운 값을 추가하거나 안에 들어있는 값을 제거하는 것이 가능하다.

이 페이지에서는 되도록이면 간단한 개념 및 사용법만 설명하고 넘어갈 것이다. 즉, 구체적인 내부 구현이나 성능에 관한 이야기는 하지 않는다.

순서를 통해 접근할 수 있는 자료구조

순서를 통해 접근할 수 있는 자료구조는 일반적으로 다음의 특징을 가지고 있다.

  • [a, b, c, d] 꼴로 표기한다.
    • a, b, c, d는 각각 아이템이라고 한다.
    • 아이템들은 타입이 같을 수도, 아닐 수도 있다. 이는 언어마다 조금씩 다르므로 이후에 더 설명한다.
    • 안에 있는 총 아이템의 개수를 확인할 수 있다.
      • 위의 예시에서는 아이템이 총 4개 들어있다.
  • 아이템들에는 순서가 있다.
    • 제일 왼쪽에 있는 아이템이 가장 앞에 있는 아이템이다.
    • 순서(혹은, 인덱스)가 0부터 시작한다.
      • 즉, 첫 번째 아이템이 0번, 두 번째 아이템이 1번, ... 순서로 번호가 매겨져있다.
  • 특정한 인덱스에 있는 아이템에 접근할 수 있다.
    • 예를 들어, 리스트 안에 5개의 아이템이 있다면 인덱스 0번에 있는 아이템에 접근할 경우 맨 앞에 있는 아이템의 값을 받아올 수 있다.
    • 특정 인덱스에 있는 아이템을 수정하는 것도 가능하다.
  • 특정한 인덱스에 새로운 아이템을 더할 수 있다.
    • 이 경우 기존에 해당 인덱스에 있는 아이템들부터 뒤로 밀린다.
    • [0, 1, 2, 3, 4]에서 2번 인덱스에 새로운 아이템 9를 넣으면 [0, 1, 9, 2, 3, 4]가 된다.
  • 특정한 인덱스에 있는 아이템을 제거할 수 있다.
    • 이 경우 기존에 해당 인덱스 뒤에 있는 아이템들부터 앞으로 당겨진다.
    • [0, 1, 2, 3, 4]에서 2번 인덱스에 있는 아이템을 제거하면 [0, 1, 3, 4]가 된다.
# 파이썬에는 list(리스트)를 통해 위의 자료구조가 구현되어 있다.

# 지금까지는 변수 이름을 알파벳 하나로 썼는데, 실제 개발할 때는 변수가 어떤 값을
# 담고있는지 더 쉽게 파악하기 위해서 변수명을 더 길고 자세하게 쓴다.
# 파이썬에서는 변수명을 지을때 언더바(_)로 구분된 단어들을 사용하는데, 이를
# snake case라고 한다. camel case, kebab case, pascal case등 다른 종류의 case도
# 있는데, 자세한 내용은 검색해보길 바란다.

# 아래와 같이 리스트를 생성한다.
number_list = [1, 2, 3, 4, 5]

# 리스트의 길이가 곧 리스트에 들어있는 아이템 개수다.
list_length = len(number_list)  # 5

# 아래와 같이 리스트의 특정 인덱스에 접근한다.
n = number_list[0]  # 0번째 인덱스에는 1이 들어있다.
n = number_list[3]  # 3번째 인덱스에는 4가 들어있다.
n = number_list[-1]  # 파이썬에서는 뒤에서부터 인덱스를 접근할 수도 있다. n은 5다.
n = number_list[-2]  # 뒤에서 두 번째 아이템은 4다.

# 마지막 인덱스는 4다. 즉, 인덱스 5에 해당하는 아이템은 존재하지 않는다.
#n = number_list[5]  # list index out of range 에러가 발생한다.

# 특정 인덱스에 있는 값을 바꿀 수도 있다.
number_list[0] = 8  # number_list가 [8, 2, 3, 4, 5]가 된다.

# 리스트의 끝에 새로운 아이템을 더할 수 있다.
number_list.append(123)  # number_list가 [8, 2, 3, 4, 5, 123]이 된다.

# 리스트의 끝에 있는 아이템을 제거할 수 있다.
val = number_list.pop()  # val에는 제거한 값이 들어간다.
# 여기서 val은 123, number_list는 [8, 2, 3, 4, 5]다.

# 리스트의 특정 인덱스 새로운 아이템을 더할 수 있다.
number_list.insert(2, 123)  # 인덱스 2에 해당하는 위치에 123을 추가한다.
# 여기서 number_list는 [8, 2, 123, 3, 4, 5]다.
number_list.insert(999, 123)  # 인덱스 999에 해당하는 위치에 123을 추가한다.
# 인덱스 999에 해당하는 자리가 없지만, 조용히 끝에 더해준다.
# 여기서 number_list는 [8, 2, 123, 3, 4, 5, 123]이다.

# 리스트의 특정 인덱스의 아이템을 제거할 수 있다.
del number_list[3]  # 인덱스 3에 해당하는 위치에 있는 아이템을 제거한다.
# 여기서 number_list는 [8, 2, 123, 4, 5, 123]이다.
del number_list[-2]  # 인덱스 -2, 즉, 뒤에서 두 번재 있는 아이템을 제거한다.
# 여기서 number_list는 [8, 2, 123, 4, 123]이다.

# 리스트에 있는 특정 아이템을 찾아서 제거할 수도 있다.
number_list.remove(2)  # 리스트에서 2를 찾아서 제거한다.
# 여기서 number_list는 [8, 123, 4, 123]이다.
number_list.remove(123)  # 리스트에서 123을 찾아서 제거한다.
# 이때, 앞에 있는 아이템을 먼저 찾아서 제거한다.
# 여기서 number_list는 [8, 4, 123]이다.
number_list.remove(123)
# 여기서 number_list는 [8, 4]다.
number_list.remove(123)  # 없는 값을 제거하려고 시도하면 에러가 발생한다.
// WIP
// WIP
// WIP

이름을 통해 접근할 수 있는 자료구조

이름을 통해 접근할 수 있는 자료구조는 일반적으로 다음의 특징을 가지고 있다.

  • {x: a, y: b, z: c} 꼴로 표기한다.
    • x, y, z를 키(key), a, b, c를 값(value)이라고 하고, (x, a)를 키-값 쌍(key-value pair)이라고 한다.
    • 키는 보통 string, 혹은 int타입의 값을 사용한다.
      • 꼭 그래야 하는 것은 아니지만, 많은 경우 이렇게 사용할 것이다.
      • 자세한 설명은 이후 관련 내용을 다뤄야 할때 설명하도록 하겠다.
  • 특정한 키를 통해 값에 접근할 수 있다.
    • 위의 예시에서는 x를 통해 a에 접근할 수 있다.
    • 그렇기 때문에 키값은 중복될 수 없다.
      • 즉, {x: a, x: b} 같이 x라는 키가 두 번 사용될 수 없다.
    • 키를 통해 접근한 값을 수정할 수 있다.
  • 새로운 키와 값을 할당할 수 있다.
  • 키값을 통해 키-값 쌍을 제거할 수 있다.
# 파이썬에는 dictionary(딕셔너리, 줄여서 dict)를 통해 위의 자료구조가 구현되어 있다.

# 아래와 같이 딕셔너리를 생성한다.
sample_dict = {'a': 123, 10: [1, 2, 3]}

# 키를 통해 값에 접근이 가능하다.
x = sample_dict['a']  # x에 123이 들어간다.
x = sample_dict[10]  # x에 [1, 2, 3]이 들어간다.

# 키를 통해 접근한 값을 변경할 수 있다.
sample_dict['a'] += 10  # 값에 접근해서 값을 수정했다.
# 여기서 sample_dict는 {'a': 133, 10: [1, 2, 3]}이 된다.
sample_dict[10] = 42  # 특정 키에 들어있는 값을 덮어썼다.
# 여기서 sample_dict는 {'a': 133, 10: 42}가 된다.

# 새로운 키-값 쌍을 추가할 수 있다.
sample_dict['x'] = 123  # 'x'라는 키에 123이라는 값을 할당했다.
# 여기서 sample_dict는 {'a': 133, 10: 42, 'x': 123}이 된다.
# 123이라는 값이 두 번 들어갔다. 값은 중복이 되어도 상관 없다.

# 키를 통해 키-값 쌍을 제거할 수 있다.
del sample_dict['a']  # 'a'라는 키와 이에 할당된 값을 제거했다.
# 여기서 sample_dict는 {'a': 133, 10: 42, 'x': 123}이 된다.
// WIP
// WIP
// WIP

글 목록