기본 콘텐츠로 건너뛰기

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'를 반환한다.

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

댓글

이 블로그의 인기 게시물

태백산, 산당, 서낭당 그리고 사람들┃답사 후기

[2017년 6월에 태백산 일대의 답사를 다녀와서 쓴 글입니다. 답사는 6월 3일부터 6월 4일까지. 후기 작성일 2017. 6. 7.] · · · 태백산에 다녀왔다. 천제단, https://www.khan.co.kr/local/Gangwon/article/202204281434001#c2b 난 답사를 싫어한다. 주위 사람들은 다 알고 있다. '왜 가야 하나'에 적절한 답을 가져본 적이 없다. 학부 때는 '학술'을 가장한 MT같은 것이니 어쩔 수 없다 싶었는데, 대학원에 들어와서는 그마저도 관심이 시들해졌다. '학'은 사라지고 '술'을 위해서 가는 것이라면 또 굳이 갈 이유가 있을까 싶기도 했다. (실제 답사가 다 그런 것은 아니다. 내가 답사에서 무언가 발견할 수 없었기 때문에 그렇게 느꼈던 것 같다) 그런데 박사수료 후부터 조금 달라졌다. 이제 '그곳'에 가면 이야기가 보이기 시작한다. 그것도 재미가 있다. 왜 그런가 싶었는데, 역시 수준 높은 연구자들과 함께 가서 그런 것 같다. 혼자 갔다면 도저히 그곳의 이야기, 그곳 사람들의 이야기를 듣지 못했을 터다. ('자기 문제의식'이 명료화 되었다는 점도 중요한 것 같기는 하다) '산악신앙'은 상식적으로는 '원시신앙'으로 학술적으로는 자연신앙 내지는 마을신앙과 관련된 민속신앙으로 이야기된다. 고도의 신학적 이야기, 그래서 인생의 의미를 음미하는 따위의 것이 담겨있지 않다. 그래서 상당히 빈곤하게 이해된다. 그런데 이번에 태백산 답사를 가서, 거기에 '인간'을 들여다 보는 '어떤 창'이 있다는 것을 새삼스럽게 확인하게 되었다. 산은 '신성한 곳'이다 태백산 같이 높은 산, 주변 지역의 '중심'이 되는 산은 특히 그렇다. 그런 산들은 일단 직접적으로 인간에게 '위험'하다. 맹수로부터 목숨을 위협 받을 수 있는 곳이다. 높...

오늘이 토끼 해의 시작? - 양력 1월 1일과 계묘년 (얼룩소 글)

※ 이 글은 '얼룩소'에 2023년 1월 1일에 게재했던 글입니다. ─── ∞∞∞ ─── 양력 1월 1일이 밝았네요. 종교가 없더라도 해맞이, 떡국먹기, 덕담 등을 하게 되는 날입니다. 저도 새해 첫날 일출을 보며 올해 꼭 이루고 싶은 것을 소원으로 빌 계획입니다. 그런데 언론에서 이 시기가 되면 늘 호들갑 떨며 이야기하는 것이 있습니다.  'OOO년 새해가 밝았습니다!'  언젠가부터 우리는 위화감 없이 양력 설에 'OOO년 새해'라는 이야기를 하고 있습니다. https://www.gynews.kr/news/articleView.html?idxno=21376 2022년은 임인년(壬寅年)이었고, 2023년은 계묘년(癸卯年)입니다. '검은 토끼의 해'라고들 합니다. 일단 'OOO년'은 60갑자로 만드는 거 다 아실 겁니다. 10간: 갑을병정무기경신임 계 12지: 자축인 묘 진사오미신유술해 색은 10간에 배당되어 있죠. 오방색이라 해서 청·적·황·백·흑색을 말하죠. 각각 방위가 배당되어 있어 오'방'색이라 하는 것이죠. https://blog.naver.com/patorry '임계'에 흑색이 배당되어 있어서 '검은 토끼'하는 것입니다. 그런데 육십갑자 기년법(紀年法)과 오방색이 결합된 것은 비교적 최근의 일인 것 같습니다. 관련 분야 전문가들은 한결같이 과거 기록에서는 볼 수 없었다고 말하니 말입니다( 자료 1 ).  이걸 두고 사이비 종교나 상업주의에 물든 무지성 추종이라 핏대 세워 비판하는 경우도 있습니다만, 민속(문화)은 사실 계속 변하는 것이죠. 육십갑자 기년과 오방색을 결합해 이야기하는 것은 현대 소비문화에 최적화된 민속 관념의 현주소를 보여주는 것으로 볼 수 있습니다.   사실 그보다 흥미로운 것은 양력 체계와 음력 체계가 뒤섞였다는 점이죠 뭐 새삼스러울 것은 없습니다. 우리의 조상님들은 음력만 쓰지 않고 양력도 써 왔죠. 그래서 ...

"명상 수련이 뇌와 면역 체계에 급속한 변화를 일으킨다"(논문 이미지 설명)

 신심미약종교학 채널 에서 다뤘던 " Neural and molecular changes during a mind-body reconceptualization, meditation, and open label placebo healing intervention " 논문 리뷰글에 이어서, 해당 논문의 핵심 메시지를 논문의 그림들에 대한 설명을 중심으로 이곳에 정리한다. 논문 소개 Neurosciencenews.com 기사 "마음과 몸의 재개념화, 명상 및 공개 라벨 위약 치유 중재 과정에서의 신경 및 분자적 변화"(2025)의 연구 실험 설계를 담고 있는 그림1 출처: https://www.nature.com/articles/s42003-025-09088-3 Fig. 1: Study design, participants, data collection, and recruitment에 대한 설명 이 그림은 7일간의 집중 명상 프로그램이 인간의 뇌와 신체에 미치는 영향을 과학적으로 측정한 연구의 전체적인 설계를 보여주고 있다. A. 연구진은 먼저 뇌와 신체의 생물학적 변화를 포착하기 위한 다양한 측정 방법을 준비했다. 뇌의 변화를 관찰하기 위해 MRI를 통한 기능적 연결성과 구조적 변화를 측정하고, 신체의 변화를 파악하기 위해 혈액 샘플에서 신경 성장 인자, 대사 물질, 단백질, 그리고 엑소좀 내 RNA까지 광범위하게 분석하는 체계를 구축했다. B. 연구에는 총 20명이 참여했는데, 이 중 14명이 여성, 6명이 남성이었으며 평균 연령은 46세였다. 참가자들은 명상 경험 수준에 따라 초보자와 숙련자로 구분되었고, 각 참가자의 생체 표지자 수준도 사전에 측정되어 분류되었다. C. 프로그램은 9일에 걸쳐 진행되었다. 실제 개입 프로그램은 Day 1부터 Day 7까지 7일간 진행되었으며, 참가자들은 매일 4-6시간의 명상, 2-4시간의 재개념화 교육(고통과 치유에 대한 인식 전환), 그리고 1시간 내외의 치유 의식에 참여했다. 프로그램...