Py) 기초 - 객체(기타)

Py) 기초 - 객체(기타)

파이썬 기반 데이터분석을 위하여 파이썬 기본 객체 핸들링에 대해 좀 더 알아본다.


객체의 중첩

파이썬의 대표적인 기본 객체 3종을 꼽자면 리스트(list), 튜플(tuple), 딕셔너리(dictionary)를 꼽을 수 있다. 물론 앞에서 세트(set)에 대해서도 다루긴 했지만 상기 3개 객체대비 사용빈도가 적다. 아무튼 각 객체는 중첩하여 쓸 수 있는데 이에 대해 알아보고자 한다.

먼저 중첩된 객체라고 하면 영어로 “Nested” 라는 말을 쓰는데 이는 중첩된 객체를 의미하는 프로그래밍 언어에서 자주 사용되는 단어이다. “중첩된” 이라는 표현 이외에는 “내포(內包)된”이라고 하기도 한다. 하지만 내포 라는 표현보다는 “계층 구조”나 “단계별 구조”와 같은 표현이 조금 더 와닿지 않을까 한다.

그리고 중첩된 객체가 아닌 일반 객체를 표현할 때 영어로 “Flatten”이라는 표현을 사용한다. 즉, 파이썬 리스트에 “Flatten”이라는 표현을 사용한다면 중첩된 객체를 풀어서 평평한 단일 리스트로 만드는 것을 의미한다. 그 외에도 “단순화” 또는 “펼치기”라는 표현을 사용할 수도 있다.

실습

리스트 객체의 중첩 사례를 살펴보자.

다음의 리스트는 원소가 1개인 리스트이며 그 원소 또한 원소를 3개 포함하고 있는 리스트이다. 이 리스트는 향후 NumPy 라이브러리의 행이 1개인 배열(Array) 객체 또는 Pandas 라이브러리의 행이 1개인 데이터프레임(DataFrame)을 생성할 때 사용할 수 있다.

1
2
[[1, 2, 3]]
## [[1, 2, 3]]

다음의 리스트는 원소가 3개인 리스트이며 그 원소들 또한 원소를 각각 2개씩 포함하고 있는 리스트이다. 이 리스트는 향후 NumPy 라이브러리의 행이 3개인 배열(Array) 객체 또는 Pandas 라이브러리의 행이 3개인 데이터프레임(DataFrame)을 생성할 때 사용할 수 있다.

1
2
[[1, 2], [3, 4], [5, 6]]
## [[1, 2], [3, 4], [5, 6]]

리스트의 원소는 리스트만 올 수 있는 것이 아니라 튜플이나 딕셔너리도 올 수 있다. 다음의 리스트 객체는 두 번째와 세번째 원소각 각각 튜플과 딕셔너리인 것을 볼 수 있다.

1
2
3
l1 = [1, (100, 200), {"k1": 2}]
l1
## [1, (100, 200), {'K1': 2}]

객체 내부의 원소에 접근하는 코드는 기존 객체 핸들링 코드와 크게 다르지 않으며 다음과 같이 작성할 수 있다.

1
2
3
4
5
6
7
8
l1[0]
## 1

l1[1]
## (100, 200)

l1[2]["k1"]
## 2

객체 관련 함수

앞에서 기본 객체를 생성할 때 괄호를 사용하였으나 이와 관련하여 각 객체에 대응되는 함수 또한 존재하며 이는 다른 객체를 원하는 객체 유형으로 변환할 수 있다.

● list(): 리스트 함수
● tuple(): 튜플 함수
● dict(): 딕셔너리 함수
● set(): 세트 함수

실습

먼저 list() 함수를 알아본다.

list() 함수는 대괄호 대신 사용할 수 없다. 즉, 리스트를 생성하고자 할 때 사용할 수 없다. 다음과 같이 코드를 작성할 경우 에러메세지가 발생하는 것을 알 수 있다.

1
2
3
4
5
6
7
list(1, 2, 3)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
~\AppData\Local\Temp\ipykernel_5980\3397194821.py in <module>
----> 1 list(1, 2, 3)

TypeError: list expected at most 1 argument, got 3

list() 함수는 다음과 같이 리스트가 아닌 객체를 리스트로 만들어주는 기능을 한다. 단, 딕셔너리 객체를 입력으로 할 경우 딕셔너리 객체의 키 목록을 리스트로 반환한다.

1
2
3
4
5
6
7
8
list([1, 2, 3])
## [1, 2, 3]

list({1, 2, 3})
## [1, 2, 3]

list({"aa": [1, 2], "bb": [3, 4]})
## ['aa', 'bb']

tuple() 함수는 객체를 튜플로 변환한다.

1
2
tuple([1, 2, 3])
## (1, 2, 3)

dict() 함수는 딕셔너리 객체를 생성한다. 그러나 중괄호를 사용하여 생성하는 방법과 달리 함수를 사용하면 키가 숫자이거나 띄어쓰기가 있는 등 특수한 이름의 키를 지정할 수 없다.

1
2
dict(aa = [1, 2], bb = [3, 4, 5])
## {'aa': [1, 2], 'bb': [3, 4, 5]}

set() 함수는 객체를 세트 객체로 변환한다. 다음의 경우 입력된 리스트 객체가 세트로 바뀌면서 중복 원소인 3이 하나 제거되어 원소가 1, 2, 3인 세트 객체가 반환된 것을 볼 수 있다.

1
2
set([1, 2, 3, 3])
## {1, 2, 3}
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×