반응형

안녕하세요 Hi Create입니다!

이번에는 자료형의 변환에 대해 가져왔습니다.

우리가 프로그래밍을 하다보면 어떤 변수를 다른 자료형으로 바꿀 때가 있습니다.

파이썬에서는 내장 함수들을 통해 자료형을 변환할 수 있게 해놓기도 하였고, 모듈을 사용할 수도 있습니다.

 


1. 수치 형의 변환

우선 수치 형을 변환해 볼겁니다.

그중에서도 다른 자료형에서 정수형으로 변환해봅시다

 

1) 정수형으로 변환하기

보통은 내장 함수로 처리할 수 있습니다. int() 안에 객체를 넣으면 정수형으로 변환됩니다.

s = '1234567'
f = 3.141592

print(int(s))
print(int(f))

위처럼 하면 거의 모든 자료형을 정수형으로 바꿀 수 있을 것입니다.

해보시면 f, 즉 실수형 자료형의 소수점 부분을 완전 잘라먹고 나온다는 것을 알 수 있을겁니다.

그렇다면 반올림을 하려면 어떻게 해야할까요?

바로 round()함수를 쓰면 됩니다. 이것을 쓰면 반올림이 된 정수형으로 나옵니다.

※ 롱형은 파이썬 3.9버전부터 없어진 듯합니다 구문 에러(Syntax Error)가 나오더군요

 

다음은 모듈을 사용하는 방법입니다. 파이썬에는 수학 연산이나 복잡한 수식 연산을 위해 math모듈이 존재합니다. 이후에 여러 모듈을 소개할 때 더 자세히 소개해드리겠습니다.

이 math모듈에는 floor()함수와 ceil()함수를 통해 정수형으로 다른 자료형을 변환시킬 수 있습니다.

먼저 floor()함수는 주어진 인수보다 작거나 같은 수 중에서 가장 큰 정수형을 가져옵니다. ※옛날 버전(python 2.xx)에서는 실수로 가져오지만 최신 버전에서는 정수로 가져옴)

다음 예시를 보시죠.

import math
math.floor(1.1)
math.floor(1.7)
math.floor(-1.0)
math.floor(-1.9)

위의 예시의 결과가 어떤가요?

1,1,-1,-2로 나올겁니다.

1.1보다 작거나 같은 정수는 '-∞,⋯,-1,0,1' 이죠. 이중 가장 큰 수가 바로 1인 것입니다.

이런 식으로 계산됩니다.

 

ceil()함수는 반대입니다. ceil()함수는 주어진 인수보다 크거나 같은 수 중에서 가장 작은 정수형을 가져옵니다.

import math
math.ceil(1.0)
math.ceil(1.7)
math.ceil(-1.8)

위의 예시도 마찬가지로 '1, 2, -1'이 나올겁니다. 

 

2) 실수형으로 변환

이번에는 실수형으로 변환해봅시다.

실수형도 마찬가지로 float()을 사용하면 됩니다.

다만 복소수로 만들고 싶다면 complex를 사용하면 됩니다.

s = '6789'
i = 10

print(float(s))
print(float(i))

이렇게 하면 '6789.0, 10.0'이 나올겁니다.

complex(1,3)

이러면 복소수로 (1+3j)라는 결과가 나옵니다.

이번에는 좀 더 복잡한 시퀀스 자료형의 변환을 해보죠.


2. 시퀀스 자료형의 변환

시퀀스 자료형에 대해서는 많은 포스팅을 통해 알아보았습니다. 이것을 보시는 것을 권장드립니다.

[프로그래밍 기초][파이썬]8. 시퀀스와 문자열,리스트,튜플 http://hiittech.tistory.com/33

 

[프로그래밍 기초][파이썬]8. 시퀀스와 문자열,리스트,튜플

안녕하세요 HiCreate입니다!!! 이번 포스팅에서는 문자열에 대해 좀 더 알려드리려 합니다. 1.시퀀스와 문자열,리스트,튜플 2. 문자열 심화 [1.시퀀스와 문자열,리스트,튜플] 문자열은 파이썬에서 시

hiittech.tistory.com

어쨌든 시퀀스 자료형은 순서가 있는 자료형이라는 뜻으로, 문자열, 리스트, 튜플 등이 있습니다.

1) 리스트로 변환하기

첫번째는 리스트로 변환하는 것입니다. 이것도 내장 함수를 통해 변환할 수 있습니다.

t = (1,2,3,4)
s = 'ABCDEF'

print(list(t))
print(list(s))

변수 t는 튜플 형식입니다. 변수 s는 문자열이죠.

list()함수를 사용하여 두 개를 리스트로 변환하면 다음과 같은 결과가 나옵니다.

우선 튜플은 리스트로 변한 것을 알 수 있죠.

문자열 s를 볼까요?

문자열을 리스트로 변환하면 각 객체. 즉 문자가 리스트의 객체로 들어갑니다. 그것은 8번 포스트에서 설명해드린 것처럼 시퀀스 자료형의 특징이기 때문입니다. 문자열은 애초에 각 문자가 합쳐진 자료형이기 때문이죠.

문자열 s는 애초에 'A','B','C','D','E','F' 가 순서대로 나열되어 있는 것입니다.

 

2) 튜플로 변환하기

튜플로 변환할 때도 마찬가지입니다.

tuple()을 사용하면 리스트와 문자열 모두 튜플로 변환할 수 있습니다.

 

3) 문자열로 변환하기

문자열로 변환하는 것은 여러가지 방법이 있습니다.

먼저 str()함수를 쓰는 것입니다.

얼핏 봐서는 리스트에서 문자열로 바뀐 것이 맞는지 헷갈릴 수 있습니다. 하지만 type()을 써보면

문자열이라는 것을 알 수가 있죠.

사실 str()은 비형식인 문자열 변환이라고 합니다. 하지만 다른 것보다 훨씬 잘 알려져 있고 쉽게 사용할 수 있어 가장 많이 쓰입니다.

 

다음은 repr() 함수를 쓰는 방법인데요. str()보다 형식적인 변환이라고는 하지만 그냥 쓰는 방법은 같습니다.

그렇지만 추가적인 기능이 있는데요 바로 역표현입니다. 즉, 역으로 변환할 수 있다는 것이죠. 다음 예제를 같이 해보죠.

>>>s1 = repr([1,2,3,4])
>>>type(s1)
>>>list(s1)
>>>s2 = eval(s1)
>>>s2
>>>type(s2)

꼭 인터프리터에서 해보세요

이런 결과가 나올겁니다.

왜 그런지 알아봅시다.

s1에 리스트 형태의 [1,2,3,4]를 문자열로 변환해서 넣었습니다. 그렇기 때문에 s1에는 리스트 전체가 문자열로 들어가있죠. type()으로 확인했습니다.

이것을 list()함수에 넣으면 '[',']'와 쉼표도 문자열로 인식해서 객체로 들어갑니다

s2에 eval(s1)을 넣으면 역으로 문자열이 되어 나옵니다 이번에도 마찬가지로 '[',']'를 문자로 인식한 것입니다.

 

중요한 것은 이런 것을 어떨 때 쓰느냐겠죠.

어떤 객체를 문자열로 바꾼 뒤에 다시 원래 객체로 바꾸고자 할 때는 repr과 eval을 쓰는 것이 가장 좋습니다.

다음 예제를 같이 해봅시다.

L = ['하이 크리에이트', 'Hi Create', 1, 1/4.0]
for s in L:
    print('s', s)
    print('str(s)', str(s))
    print('repr(s)', repr(s))

이렇게 하면 다음과 같은 결과가 나옵니다.

차이가 보이시나요?

원래 문자열인 것을 변환할 경우 repr()함수에는 문자열이라는 표시가 납니다.

 

 

4) 문자열 요소가 있는 리스트, 튜플을 문자열로 변환하기

문자열을 리스트로 분리할 때는 .split() 메소드를 사용합니다. 그 후에 이것을 다시 문자열로 변환하고 싶다면 join() 메소드를 사용합니다. join은 어떤 것을 기준으로 연결시킨다는 의미를 가지고 있습니다.

위에서 보면 join을 어떻게 쓰는지 아실 수 있을겁니다. ' '는 공백을 단위로 한다는 뜻이고 괄호안에 연결시킬(변환할) 객체를 넣는겁니다. 튜플도 똑같이 하시면 됩니다.

 

5) 리스트, 튜플을 사전으로 변환하기

사전 또한 시퀀스 자료형입니다. 그렇기 때문에 다른 자료형으로 변환하거나 반대로 할 수도 있겠죠.

사전으로 변환할 때는 key따로, value따로 하면됩니다. 예네도 메소드가 있으니 쉽게 할 수 있을겁니다.

우선 이렇게 keys와 values를 리스트로 만든 다음 zip()를 통해 하나로 만들고 dict()로 사전으로 만들면 끝입니다.

 

6) 사전을 리스트, 튜플로 변환하기

이번엔 반대로 해보죠.

메소드인 keys(), values(), items()로 분리하고 리스트, 튜플을 사용하면 됩니다. 그러면 각 객체로 분리되어 리스트나 튜플로 변환됩니다.

 

7) 문자 변환

문자 변환은 아스키 코드와 문자와의 변환입니다.

chr()은 아스키 코드를 알파벳으로, ord()는 알파벳을 아스키 코드로 바꿔줍니다.

 

8)진수 변환

이번엔 진수 변환입니다. 임의의 진수(16진수, 8진수, 2진수, 5진수)를 10진수로 변환하는 것은 굉장히 간단합니다.

int()를 쓰면됩니다.

앞에는 변환하고자 하는 수, 뒤에는 원래 진수입니다.

 

반대로 하는 것은 여러가지입니다. 우선 8, 16진수로 바꿀때는 hex()함수와 oct()함수를 사용합니다.

hex()는 16진수로, oct()는 8진수로 바꿉니다.

10진수에서 2진수로 바꿀때는 어떻게 할까요? 마찬가지입니다.

2진수를 뜻하는 bin()을 사용하면됩니다.

 


오늘 이렇게 형 변환에 대해서 배워봤습니다.

후... 이렇게 길 줄이야 ㅜㅜ 그래도 알아두면 쓸데는 있으니 많이 참고해주세요

더 좋은 포스트로 돌아오겠습니다! 감사합니다!

반응형

BELATED ARTICLES

more