프로그래밍 언어/python

[python 기초 3] List, Tuple, Set, Dictionary

이현찬 2023. 3. 6. 22:25
728x90

python 기초 1 변수와 연산자에서 정수형, 실수형, 문자열, boolean의 자료형에 대해 설명했다. 이번 포스팅에서는 list, tupledictionary 자료 구조에 대해 학습한다. 이 자료 구조는 데이터를 저장하는 python의 built-in 자료 구조이지만 활용도는 매우 높다.

리스트 Lists

list는 순서가 있는 object의 집합이다. object는 python에서 변수가 지시하는(할당할 수 있는) 모든 것이라고 이해할 수 있다. 리스트는 대괄호([])로 정의해 사용할 수 있다. 정수, 실수 등 기본 자료형, 다른 list, tuple, dictionary, 특정 라이브러리에서 제공하는 numpy array, pandas DataFrame 등 특수한 데이터, 머신러닝 모델 등 모든 것을 List에 담을 수 있다. List는 object 추가, 수정, 제거 등이 가능한 mutable한 자료 구조이고, 하나의 list에 저장되는 각 object의 type은 서로 다를 수 있다. 아래의 list_example의 0번째 요소는 정수인 1, 2번째 요소는 strings인 "name" 등으로 구성된 리스트의 예이다.

list_example = [1, 2, "name", 7.18, [7,8,9]]

list의 특정 element에 접근은 대괄호([index])로 접근한다. sequence 형태의 자료형의 순서는 0부터 세기 때문에 만약 3번째 element에 접근하고자 한다면 list_example[2]로 가져올 수 있다. list_example[2]는 list의 3번째 element인 "name"를 가리킨다. 연속된 복수의 element를 가져오는 방법은 start:end를 사용해 범위를 정할 수 있다. 이를 slicing이라고 하고 이는 list 뿐만 아니라 sequence 형태의 자료형에는 모두 통용되는 개념/용어다. list의 slicing을 할 때 주의할 점은 start값은 포함하고, end값은 포함하지 않는다는 것이다. 아래의 예를 보면 이해할 수 있다.

print(my_list[1:3]) #output : [2, "name"]

List에 값을 추가하거나 제거하는 것은 다음과 같은 method를 사용한다.

list_example.append(10) # list_example의 마지막에 10을 추가
list_example.remove("name") #list_example에서 "name"을 제거

튜플 Tuple

tuple은 list와 거의 동일한 자료 구조이다. 유일한 차이점은 immutable한 자료형이라는 것이다. tuple은 순서가 있지만 수정이 불가능한자료 구조이다. tuple은 소괄호(())를 사용해 정의할 수 있고 데이터의 입력 순서에 따른 의미를 부여하거나 기준 정보와 같이 한번 생성된 데이터의 수정을 원하지 않을 때 사용할 수 있다. 또한 더 나은 퍼포먼스를 보인다고 하나 작은 프로그램을 개발한 경험 중 퍼포먼스의 차이를 느낄 정도로 이점을 느낀 적은 아직까지 없다.

tuple_example = (1,2,3, "name",(4,5,6))

print(tuple_example[1:3]) #output : (2,3)

집합 Set

Set은 유일한 값을 갖는 순서가 없고 수정 가능한 데이터 구조이다. 집합은 중괄호 {}를 사용해 정의한다. 집합은 다른 sequnce 데이터의 중복을 제거한 유일한 요소를 확인할 때 사용하거나 집합 연산을 수행하기 위해 사용할 수 있다.

set_example = {1,2,3,4}

딕셔너리 Dictionary

Dictionary는 set과 유사하게 순서가 없는 데이터 집합이다. Dictionary는 key-value 페어로 구성되어있고, 유일한 key를 사용해 value에 접근할 수 있다. Dictionary는 mutable하고 key를 사용하는 접근 방식이 매우 효율적이다.

dict_example = {'a' : 1, 'b' : 2, 'c' : 3}

위의 예에서 key는 'a', 'b', 'c'이고 이에 해당하는 value는 각각 1, 2, 3이다. 프로그램 상에서 해당 데이터에 접근하는 방법은 역시 [key]로 접근한다. dictionary에 존재하는 key의 목록을 알고 싶을 때는 .keys() 메소드를 call하면 list로 key들을 반환해 확인할 수 있다.

print(dict_example['a']) #output : 1

print(dict_example.keys() #output : ['a','b','c']

데이터 자료 구조 변환

데이터 자료 구조는 서로 변환할 수 있다. 이는 변환하고자하는 자료형(대상 데이터)와 같은 형식으로 자료 구조를 변환할 수 있다. 몇 가지 예를 살펴보자. 자료 구조 중 서로 변환할 수 있는 것과 없는 것이 존재하니 변환이 필요한 상황에서 한 번씩 해보며 파악해보자.

# list > tuple
tuple([1,2,3]) #output : (1,2,3)

# list > set
set([1,1,2,3,3,4]) #output : {1,2,3,4}

# dict > set
set({'a':1,'b':2}) #output : {'b', 'a'}

# float > int
int(8.18) #output : 8

결론

각각의 자료 구조는 장점과 단점을 갖기 때문에 상황에 맞게 적절한 자료 구조를 선택해 데이터를 다루는 연습이 필요하다. 요약하면 순서가 있는 mutable한 자료 구조가 필요하다면 list를, 순서가 있지만 immutable한 자료 구조가 필요하다면 tuple를 선택하는 등의 판단을 할 수 있을 정도의 학습과 연습이 필요하다.
데이터 사이언스에 관련된 학습을 하다보면 numpypandas 라이브러리 위에서 코드를 작성하기에 built-in 자료 구조를 사용하는 비중이 줄어들지만 결국 필요한 기능을 구현하기 위해선 기본 자료형과 자료 구조에 대한 이해와 활용 능력이 중요하게 된다.