한 걸음씩 기록하며

#.7 Data Structure : list, tuple, set, dict 본문

Python

#.7 Data Structure : list, tuple, set, dict

Haksae 2021. 12. 20. 17:30
자료구조(data structure)는 데이터를 특정 형태로 저장해 편리하게 접근 및 조작하기 위한 방법이다. 

  • Primitive Data Structure(단순 구조) : 프로그래밍에서 사용되는 기본 데이터 타입
  • None-Primitive Data Structure(비단순 구조) : 단순한 데이터를 저장하는 구조가 아니라 여러 데이터를 목적에 맞게 효과적으로 저장하는 자료 구조
    • Linear Data Structure(선형 구조)
      : 저장되는 자료의 전후 관계가 1:1 (ex. List, Stacks, Queues)
    • Non-Linear Data Structure(비선형 구조)
      : 데이터 항목 사이의 관계가 1:n 또는 n:m (ex. Graphs, Trees )

 

1. list [ ]

  • element: 리스트 안에 저장되어 있는 값들을 요소라고 부른다.
  • index: 요소들의 순서. 첫 번째 index는 0 마지막 index는 list의 크기인 n-1이다.
  • 요소들은 쉼표로 구분된다.
  • 대괄호[ ]는 리스트를 생성할 때도 사용하고, 요소를 읽어들일 때도 사용한다.

1) slicing

list_name[:] 처음부터 끝까지
list_name[1:] index 1부터 끝까지
list_name[:5] 처음부터 index 5까지

 

2. tuple ( )

  • 소괄호 ( )는 튜플을 생성할 때 사용한다.
  • 소괄호를 사용한다는 것을 제외하고 읽어들이는 방법, slicing 등 모두 list와 동일하다
  • list는 수정이 가능하고(더 많은 기능, flexible하다는 장점이 있지만) 보통 많은 양을 저장할 때 사용해 tuple보다 차지하는 메모리 용량이 크다.
  • 그러므로 수정이 필요 없고 간단한 데이터를 표현할 때는 tuple을 사용하는 것이 효과적이다.

 

my_tuple = (1, 2, 3)
my_tuple[0]
my_tuple[1:2]

1) tuple & list

tuple은 주로 list과 함께 쓰인다. list의 요소로 tuple을 쓰는데, A,B,C,D 좌표를 표현한 것을 예로 들어볼 수 있다.

A = (4, 4)
B = (5, 2)
C = (-2, 2)
D = (-3, -4)
coords = [ (4,4),  (5,2),  (-2, 2),  (-3, -4) ]

 

3. set

set은 list와 비슷해보이나 분명한 차이점이 존재한다.

  • 집합은 순서대로 저장되지 않는다. (for문을 돌리면 무작위로 나온다.)
  • 정렬되지 않기 때문에 idex가 없다.
  • 중복된 값을 저장할 수 없다. 만일 시도하면 새로운 요소가 이전 요소를 replace 한다.

  • 선언에는 2가지 방법이 있다.
  • (1) 중괄호 사용
  • (2) set( ) 함수로 감싸주기
set1 = {1, 2, 3}
set2 = set([1, 2, 3])

#만약 다시 list로 만들어주고 싶다면?
list_again = list(set2)

 

4. dictionary

  • dictionary는 key와 value로 짝을 지어 데이터를 저장한다. 리스트는 index로 부르지만, dictionary는 key로 부르게 된다.

1) 생성

my_dic = { "key1" : "value1", "key2" : "value2"}
my_dic["key1"] # result: value1 
  • data type은 string과 number를 사용할 수 있다.
  • key값은 중복될 수 없다. 만약 중복될 경우 새로운 key값이 기존 값을 replace

2) 확인 및 변경

  • 확인 : 딕셔너리의 키를 확인하고 싶을 때 적용하는 함수. key 값만 리스트로 나온다.
my_dict = 
{1: 'one', 2: 'two', 3: 'three', 4: 'four', 'hi': 'greeting'}

my_dict.keys() 
# result: dict_keys([1, 2, 3, 4, 'hi'])

 

  • 추가 : 리스트와 비슷하지만 index가 key로 대체된 개념으로 보면 된다. 추가하면 뒤에 순서대로 붙는다 (list의 append처럼)
dictionary_name[new_key] = new_value

 

  • 수정 : key에 value를 다시 할당하는 개념으로 접근한다.
my_dict[want_to_change_key] = value 

my_dict = { 1: "one", 2: "two", 3: "four" }
my_dict[3] = "three"
print(my_dict)
> {1:"one", 2: 'two', 3: "three"}

 

  • 삭제
my_dict = { 1: "one", 2: "two", 3: "three" }
del my_dict["one"]
print(my_dict)
> {2: 'two', 3: 'three'}

5. complex dictionary

  • dict의 요소를 list로
    • 딕셔너리를 list의 한 요소로 넣는 방법.
    • 딕셔너리를 그루핑하는 방법 중 하나이며, for 구문을 사용해 읽어들일 수 있다.
    • 하지만 모든 요소를 다 읽어서 원하는 값을 찾아야하기 때문에 돌리는 데 시간이 오래 걸린다.
my_cat = [
   { 
   "name" : "captain",
   "age" : 13,
   "gender" : "male"
   },
   
   {
   "name" : "marble",
   "age" : 10,
   "gender" : "female"
   }
]

for cat in my_cat:
   if cat["name"] == "captain":
      print(cat["age"]) 
        
# result: 13
     

 

  • nested dict : dict 안에 중첩으로 dict를 넣어 index만으로 원하는 값을 찾을 수 있다.
my_cat = 
   {
   "captain" : { 
      "age" : 13,
      "gender" : "male"
   },
   
   {
   "marble" : {
      "age" : 10,
      "gender" : "female"
   }
}
print(my_cat["captain"]["age"]) # result :  13 

'Python' 카테고리의 다른 글

#.9 객체지향 프로그래밍 (OOP)  (0) 2021.12.22
#.8 Data Structure Method  (0) 2021.12.21
#.6 Function & Lambda  (0) 2021.12.20
#.5 Control of Flow  (0) 2021.12.20
#.4 연산자  (0) 2021.12.20
Comments