기본 콘텐츠로 건너뛰기

python 자료의 유형

파이썬을 공부할 때, 기본 중의 기본이지만 대충 넘어간 부분이 자료형(type)에 관한 것이다.

어떤 함수는 type이 숫자만, 어떤 건 문자열만 받는다고 하는데, 머리 속에서 확실히 정리되지는 않는다. 그냥 그때그때 처리하기 바쁜데.. 사실 error 코드 보고 대처하는 수준밖에 안 된다.

공부 겸으로 한 번 정리해 본다.

근데 솔찍히 이런 그림 처음 본다. 자료형에 integer(정수), float, string(문자열), list(리스트) 정도가 익숙할 뿐이다.

파이썬 데이터 타입의 상위 분류가 '가변형', '불변형'인 것도. 강사들이 그런 이야기를 하는 경우를 듣긴 했던 것 같은데... 수업을 건성으로 들은 사람의 한계다.

그 다음으로 숫자 타입, 시퀀스 타입, 리스트 타입, 사전 타입, 세트 타입으로 나뉘고,

숫자 타입의 경우에 정수형, 소수형(실수?), 불 형(0, 1: 참, 거짓)*, 위 그림에는 없지만 복소수 형이 있다.

* 위 그림에서는 숫자 타입으로 분류하지만, 통상 불 형을 더 상위 수준 분류로 말하는 경우가 많다.

시퀀스 타입에 문자열 형, 튜플 형으로 분류되는 것도 처음 알았다(분류를 어떻게 묶느냐에 따라 다르긴 하지만).

데이터의 유형을 확인할 때 사용하는 함수 type( )은 익숙하다. 자주 사용하는 함수다.

jupyter를 이용해서 숫자 타입들을 찍어보면 다음과 같은 결과를 알 수 있다.

그동안 '복소수'는 어떻게 다루는지 몰랐는데 'a+bj' 스타일로 쓴다. 'i'는 for문에서 주로 변수로 사용해서 못 쓰게 해 놓았는지는 모르지만 'a+bi' 형태로 쓰면 type( ) 함수에서 error가 발생한다.

π 값을 어떻게 입력하는지 몰랐는데, 무한소수를 컴으로 다루는 건 한계가 있을 테니 일정 소수점에서 자른 수를 사용하고 있었다. π 값을 불러 오려면 math 라이브러리를 import해야 했다. 역시 소수니 'float' 타입으로 나온다.

불 형(Bool)은 참과 거짓을 따지는 데이터 형태를 말한다. 영국의 논리학자 조지 불(George Boole, 1815-1864)의 이름을 따 만든 용어라고 한다. 

'참', '거짓'의 2가 연산과 관련된 논리 연산 체계를 구축한 것 같다. 집합론, 명제에서 만나게 되는 ∧(논리곱), ∨(논리합), ¬(논리 부정) 등의 연산자로 구성되는 조건문을 처리하는 것이다.

위 그림에서 '가변형'의 한 종류로 리스트를 다루고 있지만, 통상적으로 '시퀀스 형'으로 분류한다. 아무래도 '가변형', '불변형'의 상위 유형 구분을 두어서 생긴 차이로 보인다. '가변', '불변'을 따지지 않는 분류에서 시퀀스 형으로 놓고 있다. 

리스트는 자주 사용하는 것이다. 대괄호로 묶인 원소의 집합이다. [1, 2, 3, 4, 5], 이런 게 리스트인데, 이렇게 '집합' 같은 의미를 갖는 게, 리스트, 튜플, 세트(집합), 사전이 있다.

리스트는 데이터를 묶어서 사용할 수 있게 해 준다. 순서, 중복도 허용된다.

[1, 2, 3]과 [1, 3, 2]는 다른 리스트이고, [1, 1, 2, 3]도 다른 것이다.

이에 비해서 세트(set)는 중괄호를 사용하고 {1, 2, 3}과 {1, 3, 2}는 같고, {1, 1, 2, 3}은 {1, 2, 3}과 같은 결과를 보여준다. 중복을 허용하지 않고, 순서도 의미가 없다. set은 합집합, 교집합, 차집합 같은 집합 연산을 하는 데 활용한다고 한다.

튜플은 소괄호()를 이용하여 집합을 표시하는데, 리스트와 대체로 비슷하지만 리스트가 요소의 수정, 생성, 삭제 등이 용이한 데 반해서 튜플은 정해진 요소를 바꿀 수 없다. 이런 특성이 어떤 활용성을 가지는지 모르겠지만, 일반적으로 임시적 매칭과 스왑에 쓰인다고 한다.

임시적 매칭은 이런 식이다.

스왑은 이런 경우다.

파이썬을 배우다 보면 튜플보다는 리스트를 많이 쓰게 되는 것 같다. 튜플에서 리스트로 전환(list( )를 이용)이나 리스트에서 튜플로의 전환(tuple( )을 이용)이 용이하기 때문에 필요한 특성을 전환해 가며 사용하면 되는 듯하다.

사전(dictionary)는 유형상 리스트, 튜플, 세트와 구분하는데, 기본 모습은 집합 형태를 가지고 있긴 하다. 큰 차이는 'key'와 'value'를 갖는다는 점일 것이다. 그래서 '매핑mapping 타입'으로 불린다.

d = {1:'a', 2:'b', 3:'c'}처럼 1과 a를 연결하여 데이터를 처리하는 경우에 사용한다. 요소를 넣고 빼고 하는 게 자유롭다. 리스트처럼 '순서'에 의미가 있는 건 아니고 key-value의 연결이 중요하다. 

print(d[1])은 a를 출력한다. print(d.get(1))도 a를 출력한다. 없는 키를 호출할 때, 가령 print(d[4])는 KeyError가 발생하고 코드가 멈추고, print(d.get(4))는 None을 출력하고 코드가 멈추지 않는다.

시퀀스 타입의 문자열string 형이 있다. 파이썬 공부할 때, 숫자형(int, float), 리스트와 함께 가장 많이 사용하는 자료 유형인 것 같다. 자연어 처리(NLP)에서도 자주 사용하기 때문에 내 연구에 가장 활용도 높은 자료 유형일 것으로 예상한다(리스트와 함께).

문장이나 단어들이 해당된다. 간혹 숫자를 문자처럼 쓰기 위해서 str( ) 함수를 사용하곤 한다. 문장을 print할 때, 계산된 숫자와 결합해서 문장을 출력하는 경우에 종종 사용했다.

코딩 처음 배울 때 출력하는 문장, 'Hello World'가 문자열의 대표적 사례다.

sent = 'Python is a wonderful tool for understanding people\'\s digital data' (문자열을 표시하는 큰따옴표나 작은 따옴표 안의 큰따옴표나 작은 따옴표는 역슬래시 혹은 \으로 감싸줘야 한다)

print(len(sent))...output은 '67'이다. 빈칸까지 센 결과다. 공백을 제거한 철자의 수는 이렇게 구할 수 있다: len(sent.replace(' ', '')). 위 문장은 58개의 철자가 쓰였다.

순서에 따라서 문자열을 따로 호출할 수도 있다. print(sent[0:6])(sent의 0행에서 5행까지 출력)는 'Python'을 반환한다. 'print(sent[:6]'으로 쓸 수도 있다. print(sent[-12:])를 실행하면 'digital data'를 반환한다.

자료형이 언제쯤 익숙해질지... 연습만이 살 길이겠지?

댓글

이 블로그의 인기 게시물

위로가 없는 '차가운 종교학', Science of Religion을 생각하며

※이 글은 얼룩소 글(23.7.13)을 옮겨온 것입니다. ━━━━━━ ♠ ━━━━━━ 종교라는 주제를 다루려면 '위로'가 필요하다? 이 말을 저는 곳곳에서 확인하게 됩니다. 그 이야기를 좀 해 보겠습니다. 정재승 박사가 총괄자문 및 프리젠터로 참여한 다큐 시리즈 '뇌로 보는 인간'의 마지막 '종교' 편에 제가 자문으로 참여하여 아주 짧은 시간 출연한 경험이 있었습니다. 시청률이 높았던 편이 아니라서 사람들로부터 별다른 반응을 듣지는 못했습니다. 우연히 EBS 다큐를 보던 친구가 '야, 너 나왔더라...잠깐 ㅎㅎ', 이런 반응을 보인 예가 있었을 뿐입니다. 함께 자문에 참여한 구형찬 박사(인지종교학)가 종교학자로서는 메인이었기 때문에 당연한 일이었습니다. '뇌로 보는 인간' - 종교 편의 한 장면┃저는 입을 다물고 있습니다^^ 몇 년이 지나서 그때 나왔던 미디어 비평 기사를 볼 수 있었습니다. 미디어스 기사 캡쳐 해당 다큐에 대한 내용을 정리한 다음에 이런 논평을 내 놓았습니다. 미디어스 관련 기사 '위로가 없다'는 비판 을 볼 수 있었습니다. 예 그렇습니다. 종교라는 주제를 다룰 때 사람들은 그런 것을 기대하곤 합니다. '종교의 본질', '참된 의미' 같은 것을 발견하고, 뭔가 진리의 말씀이나 인생을 통찰할 수 있는 지혜를 얻기를 기대합니다. 그런 이야기를 하는 종교학도 존재합니다. '현대인의 종교는 병들었다'는 진단을 내리며 '고대인의 지혜'를 회복해야 한다는 메시지를 내거나 모든 종교에 담겨있는 가장 고귀한 가르침(가령 황금률 같은)은 모두 상통하고 그것이 인간이 향유해야 할 소박하지만 분명한 진리라고 이야기하는 예도 있습니다. 프리드리히 막스 뮐러┃출처: Wikimedia Commons 종교학의 아버지라고 불리는 막스 뮐러는 '종교학으로의 초대(Introduction to the Science ...

"뇌 회로는 친숙한 것, 중요한 것과 단순한 배경을 식별합니다."(논문 정리)

흥미로운 신경과학 연구 소개를 봤습니다. 친숙한 것과 중요한 것을 먼저 식별하는 뇌 경로에 관한 연구입니다. '신경종교학'에 참고가 되는 논문일 것으로 판단되어, 내용을 정리해 봅니다.  *  *  * Brain Circuit Identifies What’s Familiar, Important, or Just Background┃Neuroscience News.com 요약 : 과학자들은 기억과 감정을 통합하여 감각 정보를 빠르게 평가하는 이전에 알려지지 않은 뇌 회로를 발견했습니다. 내측후각피질(entorhinal cortex)과 해마(hippocampus) 사이의 이 직접 피드백 루프를 통해 뇌는 중요한 광경과 소리를 거의 즉시 우선순위를 정할 수 있습니다. 이전에 알려진 더 느린 경로와 달리, 이 회로는 관련 자극과 배경 소음을 구별하는 데 도움이 될 수 있으며, PTSD와 자폐증과 같은 상태에 영향을 미칠 수 있습니다. 이 발견은 뇌가 정보를 걸러내는 방식에 대한 이해를 높이고 감각 및 기억 관련 장애를 치료하기 위한 새로운 전략으로 이어질 수 있습니다. ─── ∞∞∞ ───  익숙한 것을 한눈에 알아보는 뇌 회로, 해마의 비밀 우리는 왜 친숙한 얼굴이나 물건을 한눈에 알아볼 수 있을까요? 반대로 처음 보는 것은 어딘가 낯설게 느껴지곤 합니다. 이런 능력 뒤에는 우리의 기억 이 큰 역할을 합니다. 뇌의 해마(hippocampus)라는 부분이 과거의 기억을 보관하고 있다가, 현재 들어오는 감각 정보와 비교하여 이것이 익숙한지 새로운지 판단하도록 돕는 것이죠. 예를 들어, 해마는 “이건 예전에 봤던 거야” 혹은 “처음 보는 거네”라는 신호를 뇌의 다른 부분에 보내 우리의 인식을 조절합니다. 이 덕분에 우리는 중요한 새로운 정보 에 주의를 기울이고, 이미 아는 것은 배경 소음처럼 무시할 수도 있습니다. 해마는 특히 대뇌피질의 한 부분인 내후각 피질 (entorhinal cortex)과 긴밀히 소통합니다. 내후각 피질은 오감에...

한 해를 시작하는 날은 많다?│시간과 종교적 본능

※ 이 글은 '얼룩소'에 2023년 1월 2일에 게재했던 글입니다. (부제를 약간 수정) ─── ∞∞∞ ─── 1년의 시작점은 많습니다. 우리에게 익숙한 시간은 동지, 설, 정월대보름, 입춘 등입니다. 전에 이야기한 16세기 후반 프랑스의 신년 기념일들처럼( 참고 ) 같은 나라 안에서도 여러 신년 기념일이 있는 경우는 특이한 현상이 아닙니다. 왜 이렇게 되었을까요? 원래 지역적인 단일성은 있었을 겁니다. 특정 지역에서는 1월 1일이다, 이 동네는 음력 설이다, 이 동네는 입춘이다, 이렇게 말입니다. 이게 어떤 계기에 통합되는 과정을 거칩니다. 지역적으로 통일성을 가진 집단들이 묶여서 더 큰 집단으로 통합되면서 시간, 의례 등을 통합하는 과정이 뒤따르게 됩니다. 종교단체 수준에서도 진행이 되지만 국가 수준에서도 진행이 됩니다. 이 과정은 국가의 흥망성쇠, 종교단체의 흥망성쇠 등 집단 구속력의 변화에 따라서 부침을 겪으며 반복·중첩되었을 것으로 보입니다.  앞서 언급한 프랑스에서는 16세기에 신년 기념일을 단일화하려 했습니다. 한국에서는 그러한 노력이 19세기말 20세기에 시도되었습니다. 공식적인 수준에서 한 해의 시작일은 그렇게 하루 아침에 바꿀 수 있지만, 의례적으로 기념하는 첫 날은 쉽게 변화하지 않습니다. 이를 문화적 관성이라고 할 수 있습니다(선조들이 해왔던 대로 해야 한다는 의식으로 나타남). 여러 신년 기념일은 그런 통합의 힘에도 어떤 현실적 필요에 의해서 과거의 전승이 살아남아 그 흔적을 남긴 덕분입니다. 다만 해당 기념일을 현재에 활용하는 의미는 달라질 수 있습니다.  현재적 가치를 상실하게 된다면 사라질 운명을 일 겁니다. 그럴 경우 '고유한 문화를 지키자'는 운동이 표출될 수도 있습니다. 집단 정체성과 관련된 전통으로 선택되지 못하면 잊혀지는 것이고요. 동지 우리에게는 팥죽 먹는 날 정도의 의미만 남았습니다. 그러나 이 날도 과거에는 새해가 시작되는 날로 기념되었습니다. 그런 동지 축제가 신년 축제인 사례도...