본문 바로가기
Python (Data)/이론

[Python의 built-in 자료구조] list, tuple, set, dict

by Gina Sim 2020. 11. 11.

<선형 자료구조>

   : 자료들이 일렬로 나열되어 선을 이룸

1.  집합에 순서가 있다
2.  indexing 가능   " list[index], tuple[index] "
3.  list, tuple

 

<비선형 자료구조>

   : 자료들이 위치를 갖지 않고 bucket에 저장됨

<좌> set 내부구조, <우> dict 내부구조, <출처> https://velog.io/@jcinsh/Python-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0

1.  위치를 갖지 않기 때문에 순서가 없음
2.  indexing 할 수 없음
3.  look up 가능    " value in set, value in dict "
4. 중복값을 허용하지 않음

5.  set, dict
언제 사용?

1. 중복된 값을 골라내야 할 때
2. 빠른 look up 해야 할 때   
3. 자료의 순서가 상관없을 때

 

"4가지 자료 구조 모두 문자형, 숫자형 혼용 가능"


"순서가 있는 집합: list & tuple"

 

[ list ]

   - [ ] 형태로 표현

list 생성

list = [1, 2, 3, 4]
list
# [1, 2, 3, 4]

list 값 추가

1. append 함수 사용    " list.append(value) "
2. 값은 하나씩만 추가 가능   =>  한 번에 여러 개 추가하려 하면 에러 발생
list.append(5)
list
# [1, 2, 3, 4, 5]

list.apped(6,7)
# 에러 출력

list 값 제거

같은 값이 여러개 있을 경우 앞에서 부터 제거
list.append(1)
list
# [1, 2, 3, 4, 5, 1]

list.remove[1]
list
# [2, 3, 4, 5, 1]

list indexing

1.  왼쪽에서 오른쪽으로 0부터 시작
2.   - 값으로 indexing 할 경우 오른쪽에서 왼쪽으로 -1부터 시작
list
# [2, 3, 4, 5, 1]

list[0]
# 2
list[4]
# 1
list[-1]
# 1
list[-5]
# 2

특정 index의 값 변경

" list[ 값 바꿀 index ] = 대체할 value "
list
# [2, 3, 4, 5, 1]

list[4] = 6
list
# [2, 3, 4, 5, 6]


( tuple )

   - ( ) 형태로 표현

읽기 전용으로 생성됨   =>  수정할 수 없음 

tuple 생성

tuple= (1, 2, 3, 4)
tuple
# (1, 2, 3, 4)

값 수정 불가능

값 추가, 삭제, 대체 모두 불가능
tuple
# (1, 2, 3, 4)

tuple.append(5)
# 에러 출력

tuple.remove(1)
# 에러 출력

tuple[0] = 0
# 에러 출력

 


 

 

 

"순서가 없는 집합: set & dict"

1.  indexing 불가
2.  중복을 허용하지 않음

{ set }

   - { } 형태로 표현

set 생성 및 추가

1.  add 함수 이용해 값 추가   " set.add(value) "
+)  집합의 형태 확인 함수:  " type(집합 이름) "
set = {1, 2, 3, 4}
type(set)
# <class 'set'>

set.add(5)
set
# {1, 2, 3, 4, 5}

 set 값 제거

set
# {1, 2, 3, 4, 5}

set.add(6)
set
# {1, 2, 3, 4, 5, 6}

set.remove(6)
set
# {1, 2, 3, 4, 5}

indexing 불가

set[0]
# 에러 출력

lookup 기능

set
# {1, 2, 3, 4, 5}

1 in set
# True

0 in set
# False


{ dict }

- { } 형태로 표현

1.  사전형 집합
2.  key 값 이용
key 값

1.  문자형과 숫자형 혼용 가능
2.  중복될 수 없음 but 수정 가능
    =>  만일 중복된 key가 있으면 새로 넣어준 key의 value가 원래 있던 value 대체

dict 생성 방법 1

1.  " 변수 = dict() "를 통해 dict 형태의 변수/ 집합 생성
2.  변수에 자료 값 저장    " dict[key 값] = value "
dict_1 = dict()
type(dict_1)
# <class 'dict'>
dict_1
# {}

dict_1[0] = 1
dict_1
# {0: 1}

key & value

1.  둘 다 문자형 가능
2.  한 번에 여러 개 value 줄 수 있음
dictt = dict()
dictt['key'] = 'value1','value2','value3'
dictt
# {'key': ('value2', 'value2', 'value3') }

dict 생성 방법 2

1.  변수에 dict 형 집합을 바로 집어넣음
+)  아래 예시에서 정렬된 순서를 보면 내가 넣은 순서와 다른 것 확인 가능    =>   순서 없는 집합
dict_2 = { 'City': 'Seoul', 'job': 'engineer' }
dict_2
# {'job': 'engineer', 'City': 'Seoul'}

dict생성 방법 3

1.  변수에 dict 함수를 사용해 바로 생성    =>   " 변수 = dict( key1 = value1, key2 = value2... ) "
+)  dict 집합이 value로써 들어갈 수도 있음   
    => 아래 예시의 " 'address': {'country': 'Korea', 'City': 'Seoul'} " 확인
dict_3 = dict(name=['Hong','Gil-dong'], job= 'engineer', address= {'country' : 'Korea', 'City' : 'Seoul'})
dict_3
# {'address': {'country': 'Korea', 'City': 'Seoul'}, 'job': 'engineer', 'name': ['Hong', 'Gil-dong']}

집합 정렬 확인

내가 넣어준 값의 순서와 return 된 집합의 값 순서가 다름    =>   순서가 없음
but, 집합을 보면 '숫자 -> 소문자 -> 대문자' 순으로 정렬되는 것 확인 가능
dict_2
# {'job': 'engineer', 'City': 'Seoul'}

dict_2['country'] = 'Korea'
dict_2
# {'country': 'Korea', 'job': 'enginner', 'City': 'Seoul'}

dict_2[0] = 0
dict_2
# {0: 0, 'country': 'Korea', 'job': 'enginner', 'City': 'Seoul'}

 

 

 

 

반응형

댓글