타입 관련
이미 앞에서 형식을 변환(CAST 연산)할 때 형식 이름을 함수처럼 사용했었죠.
[In]
num = int(input("정수:"))
print(num)
[out]
정수:123
123
여기에서는 타입 관련 내장 함수 type, isinstance를 소개할게요.
type은 특정 값이나 변수가 참조하는 것이 어떤 자료형인지 알고 싶을 때 사용합니다.
데이터 분석이나 머신 러닝 등의 작업에서 사용할 데이터의 특정 필드 값이 “1234”처럼 숫자처럼 보이는 문장열일 때가 상당히 많습니다. 이럴 때 합계를 확인하거나 산술 연산을 하면 엉뚱한 결과를 도출할 수 있겠죠.
이 때 자료형을 확인한 후 적절하게 코드를 수정할 필요가 있어요.
다음은 특정 값이 어떤 자료형인지 확인하는 코드입니다.
[In]
print(type(3))
print(type(3.2))
print(type('a'))
[out]
<class 'int'>
<class 'float'>
<class 'str'>
다음은 특정 변수가 어떤 자료형인지 확인하는 코드입니다.
[In]
a = 2
b = 2.3
c = 'hello'
print(type(a))
print(type(b))
print(type(c))
[out]
<class 'int'>
<class 'float'>
<class 'str'>
파이썬에서는 특정 표현이 특정 형식 개체인지 판별하는 isinstance 메서드를 제공합니다.
다음은 isinstance 함수를 사용하여 특정 변수가 list 형식인지 판별하는 코드입니다.
[In]
ls = [1,2,3]
a = 2.3
if isinstance(ls,list):
print("Yes")
else:
print("No")
if isinstance(a,list):
print("Yes")
else:
print("No")
[out]
Yes
No
문자열 관련
문자열 클래스(str)에는 다양한 메서드를 제공하고 있어요.
여기에서는 문자열의 멤버 메서드가 아닌 내장 함수 두 개를 소개할 거예요.
하나는 문자 코드 값을 확인하는 ord 함수입니다.
다른 하나는 문자 코드 값에 해당하는 문자를 반환하는 chr 함수입니다.
다음은 소문자 a, z와 대문자 A와 Z, 숫자 0과 9의 문자 코드 값을 확인하는 코드입니다.
[In]
print(ord('a'))
print(ord('z'))
print(ord('A'))
print(ord('Z'))
print(ord('0'))
print(ord('9'))
[out]
97
122
65
90
48
57
데이터 분석이나 머신러닝 등의 작업을 할 때 분류를 위해 영문 알파벳으로 클래스를 지정할 때가 있습니다. 이러한 값은 ord 함수로 수치로 변환하여 작업하는 것이 유리할 때가 제법 있어요.
반대로 문자 코드 값을 문자로 변환할 필요도 생기는데 이 때는 chr 함수를 사용합니다.
다음은 소문자 a와 z 사이의 문자 코드 값을 통해 문자를 확인하는 코드입니다.
[In]
for code in range(ord('a'),ord('z')+1):
print(code,':',chr(code))
[out]
97 : a
98 : b
99 : c
100 : d
101 : e
102 : f
103 : g
104 : h
105 : i
106 : j
107 : k
108 : l
109 : m
110 : n
111 : o
112 : p
113 : q
114 : r
115 : s
116 : t
117 : u
118 : v
119 : w
120 : x
121 : y
122 : z
컬렉션 관련
이번에는 컬렉션 관련 내장 함수를 알아볼게요.
먼저 문자열 길이나 컬렉션의 요소 개수를 확인하는 len 함수입니다.
[In]
print(len('abc'))
ls=[1,4,2,5,6,7,3]
print(len(ls))
[out]
3
7
컬렉션 내의 요소 합계를 반환하는 sum, 최솟값과 최댓값을 반환하는 min, max 함수도 있습니다.
[In]
print(sum(ls))
print(min(ls))
print(max(ls))
[out]
28
1
7
for문에서 자주 사용했던 range 함수도 있죠.
range([start=0,] stop [,step=1])
[In]
print(range(10))
[out]
range(0, 10)
range 함수에는 시작, 끝, 간격을 입력 인자로 전달할 수 있습니다.
이 중에 시작과 같격은 전달하지 않으면 0과 1로 동작합니다.
[In]
for r in range(10):
print(r, end =' ')
[out]
0 1 2 3 4 5 6 7 8 9
두 개의 값을 전달하면 시작과 끝이며 간격은 1입니다.
[In]
for r in range(2,10):
print(r, end =' ')
[out]
2 3 4 5 6 7 8 9
세 개의 정수를 전달하면 시작, 끝, 간격입니다.
[In]
for r in range(2,10,3):
print(r, end =' ')
[out]
2 5 8
시작보다 끝이 더 작고 간격을 음의 정수를 전달하면 점점 줄어드는 구간을 만들 수 있어요.
[In]
for r in range(10,-10,-3):
print(r, end =' ')
[out]
10 7 4 1 -2 -5 -8
컬렉션 관련 내장 함수 중에는 for문을 사용할 때 요소 뿐만 아니라 인덱스로 참조할 수 있는 enumerate 함수를 제공합니다.
보통 2개 이상의 컬렉션으로 관리하는 자료를 같은 인덱스로 접근하고자 할 때 사용합니다.
다음은 이름과 번호 컬렉션을 같은 인덱스로 접근하는 코드입니다.
[In]
names = ['홍길동','강감찬','을지문덕']
nums = [3,2,7]
for i, name in enumerate(names):
print(nums[i],':',name)
[out]
3 : 홍길동
2 : 강감찬
7 : 을지문덕
정렬한 컬렉션을 반환하는 sorted 함수도 있어요.
[In]
sorted_nums = sorted(nums)
print(sorted_nums)
[out]
[2, 3, 7]
마지막으로 zip 함수를 소개할게요.
zip 함수는 두 개의 컬렉션을 같은 요소끼리 결합시켜 열거할 수 있게 해 줍니다.
앞에서 enumerate와 같은 목적이지만 사용 방법이 조금 다릅니다.
enumerate는 입력 인자가 하나의 컬렉션이고 for문에서 인덱스와 요소를 참조할 수 있었죠.
zip은 입력 인자가 두 개의 컬렉션이고 for문에서 각 컬렉션의 같은 인덱스의 요소를 참조할 수 있어요.
[In]
for num, name in zip(nums,names):
print(num,':',name)
[out]
3 : 홍길동
2 : 강감찬
7 : 을지문덕
이 외에도 다양한 내장 함수가 있습니다. 프로그래밍하면서 필요한 것을 검색하고 사용하다보면 자연스럽게 익숙해 질 거예요.