AI데이터 분석_ 파이썬 기초8_파이썬의 내장함수 종류

2024. 9. 8. 14:23파이썬을 활용한 데이터 분석

내장함수 

이미 파이썬 안에 내장되어있어, import해줄 필요없이 바로 사용가능한 함수이다.

 

 

문자형 내장함수

#내장함수
#이미 파이썬 안에 내장되어있기때문에 따로 improt해줄 필요없이 바로 사용가능

#내장함수의 문자형 내장함수
#1) chr(): 괄호안에 아스키코드, 유니코드를 입력하면 해당 코드값을 가진 문자를 반환
print(chr(65),type(chr(65))) #65의 코드를 가진 문자인 A를 반환
print(chr(66),type(chr(66))) #66의 코드를 가진 문자인 B를 반환
print(chr(34),type(chr(34))) #34의 코드를 가진 문자인 "반환

print(chr(44032,),type(chr(44032))) #한글도 유니코드값을 가지기때문에 한글도 출력가능
print(chr(44033),type(chr(44032)))
print(chr(55034),type(chr(55034)))

print()

#문자형 내장함수 eval()
#문자형으로 전달된 표현식도 결과값을 반환해줌
print("100+200",type("100+200")) #100+200이라는 그냥 문자값. 자료도 str
print(eval("100+200"),type(eval("100+200"))) #300으로 계산됐고 자료형도 int로 출력
print("max(1,2,3,4,5)") #따옴표안에 넣었기때문에 max(1,2,3,4,5)라는 문자열
print(eval("max(1,2,3,4,5)"),type(eval("max(1,2,3,4,5)"))) #max값 계산되고 자료형 int

print()

#문자형 내장함수 format()
#입력받은 인수와 포멧코드에 따라서 형식을 갖춘 문자열을 반환. 포멧코드를 전달하지 않을 수 있으며
#전달하지 않을 경우 입력한 인수가 str로 반환됨(str함수를 호출한것과 결과가 같음))
print(10000,type(10000)) #숫자 10000이 입력되고 당연히 int로 출력
print(format(10000),type(format(10000))) #똑같이숫자형으로 입력했지만 자료형 str로 바뀜

print(format(10000000,','),type(format(10000000,',')))
#format에는 다양한 형태의 형식지정자(포멧코드)가 존재함. ,는 3자리수 마다 점찍어달라는 포멧코드
#이외에도 .(소수점 표시자리)f는 소수점 몇째짜리까지 표시할 수 있다.
print(format(2.43253,'.2f'),type(format(2.43253,'.2f')))
#소수점 둘째짜리까지 표현해달라는 뜻.
print(format(0.97,'.3%'),type(format(0.97,'.3%'))) #백분율 표시
#이렇게 포멧코드를 전달하면 해당 포멧코드에 맞는 형식으로 바뀌어서 전달해주고
#아무 코드도 입력하지 않으면 그냥 문자형으로 변환

print()

#문자형 내장함수
#str(): 전달받은 인수를 문자열 반환
print(100,type(100))
print(str(100),type(str(100)))

첫번째 문자형 내장함수 chr는 괄호안에 아스키코드를 입력하면 해당 코드값을 가진 문자를 반환해준다. 한글도 유니코드값을 가지기때문에 그에 맞는 유니코드를 입력하면 한글도 출력이 가능하다.

두번째 문자형 내장함수 eval은 문자형으로 전달된 표현식도 숫자로 인식하여 그에맞는 계산값을 반환해주는 함수이다. '100+200'은 따옴표로 감싸져있기때문에 문자형이지만 eval함수안에 적게되면 100+200으로 인식되어 300이라는 숫자값이 반환된다.

세번째 내장함수는 format은 입력받은 인수와 포맷코드에 따라서 형식을 갖춘 문자열을 반환하는 함수이다. 포멧코드를 전달하지 않으 수도 있는데, 이럴경우 입력한 str함수로 출력한 결과와 같아진다.

네번째 문자 내장함수는 str함수로 문자형이 아닌 값들을 문자형으로 형변환 시키는데 사용된다.

 

 

숫자형 내장함수

#숫자형 내장함수 (정수, 실수 둘다 포함)

#abs():괄호안에 입력된 인수를 절대값으로 반환
print(-34,type(-34))
print(abs(-34),type(abs(-34))) #마이너스 표시 사라지고 정수값으로 출력
print(abs(-3.14),type(abs(-3.14))) #실수도 가능

print()

#divmod(): 입력된 두 인수의 몫과 나머지를 '튜플'로 반환
print(divmod(10,3),type(divmod(10,3)))#몫인 3과 나머지인 1을 튜플로 묶어서 반환
print(divmod(10,2),type(divmod(10,2))) #나머지가 남지않게 딱 떨어나눠지는 것들도 그냥 나머지0으로 반환해줌

print()

# float() : 정수를 실수로 변환
# int() : 실수를 정수로 변환
print(float(10),type(float(10))) #정수 10 입력하면 뒤에 .0붙여서 실수로 변환
print(int(23.3),type(23.3)) #실수뒤에 .3 없어져서 정수로 변환

숫자형 첫번쨰 내장함수 abs는 괄호안에 입력된 인수를 절대값으로 반환해주는함수이다. 정수뿐만 아니라 실수도 가능하다.

두번째 divmod는 입력된 두 인수의 몫과 나머지를 튜플로 반환하는함수이다. 

마지막 float는 정수를 실수로, int는 실수를 정수로 반환하는 함수이다.

 

숫자 계산 함수

#숫자형 계산 함수

#max(최대값), min(최소값), sum(합계)
print(max(24,364,86,25,3)) #최대값 반환
print(min(24,23,15,352,35)) #최소값 반환
print(sum([12,2])) #전달된 리스트나 튜플과 같이 반복하는 객체의 합을 반환.
print(sum((1,2,3,4))) #바로 sum()괄호안에 적으면 에러. 괄호를 하나 더 만들어서 튜플로 값넣기

print()

#pow(값, 거듭제곱값) : 전달된 두 인수의 거듭제곱을 반환해줌. (**거듭제곱 연산자와 기능이 동일)
print(pow(12,2))
print(12**2) #거듭제곱연산자와 pow()값 동일
print(pow(10,2))

print()

#round(): 반올림값을 반환해줌
print(round(1.5),type(round(1.5))) #입력된 인수 1개이면 반올림하여 정수반환
print(round(2.5)) #반올림 안된이유: round함수는 앞자리의 수가 짝수라면 무조건 버림이됨: 오사오입의 법칙
print(round(2.34,1)) #입력된 인수가 2개라면 두번째 인수는 소수점이 몇번째 자리수까지 나올지 결정하는것
print(round(23.142,2))

숫자 계산 함수에는 최대값을 반환해주는 max함수와 최소값을 반환해주는 min이 있고, 전달된 객체의 합을 반환해주는 sum이 있다. 이외에도 전달된 두 인수의 거듭제곱을 반환해주는 pow함수와 반올림을 해주는 round함수가 존재한다.

 

시퀀스의 내장함수

#시퀀스의 내장함수
#enumerate():리스트와 함께 사용하며, 리스트안에있는 요소와 해당 요소의 인덱스번호를
#튜플로 묶어서 반환

li = ['가위','바위','보']
print(li,type(li))

print(enumerate(li1)) #enumerate는 그냥일반 출력문에서는 사용할 수 없음.
#일반 출력문으로 바로 출력하게 되면 클래스값으로 출력되기때문
#enumerate()의 값을 보려면 반드시 반복문을 통해 확인해야함

for i,j in enumerate(li):
  print(i,j)
#enumerate는 튜플로 묶어져서 나오기때문에 언패킹도 가능
#추출된 인덱스번호는 정수로 출력

print()

#range() : 숫자의 더미를 생성. 특정 범위를 지정할 수 있어 범위 지정자라고도 불림.
#다른 자료형으로 형변환 가능
print(range(1,10)) #일반 출력문으로는 요소의 값 확인이 불가하며 자료형은 range라고 나옴
print(list(range(1,11)),type(list(range(1,11)))) #range함수를 list로 형변환하여 값 확인
print(tuple(range(1,11)),type(tuple(range(1,11))))
print(set(range(1,11)),type(set(range(1,11))))
# print(dict(range(1,11)),type(dict(range(1,11))))#딕셔너리로는 형변환 안됨
print(list(range(0))) #range의 값을 0으로 하면 비어있는 리스트생성가능

print()

#len(): length의 줄인말로 전달된 객체길이 (항목갯수)를 반환해주는 함수
li = [1,2,3,4,5,6,"안녕",3.14,True]
print(len(li),type(len(li))) #리스트의 요소갯수 정수로 반환.

#문자열에서도 사용가능!
print(len('hello python'),type(len('hello python'))) #공백도 데이터이기때문에 포함해서 길이 반환
print(len('안녕하세요'),type(len('안녕하세요')))

시퀀스의 내장함수 enumerate는 리스트와 함께 사용되는 함수로, 리스트안에 있는 요소와 해당 요소의 인덱스번호를 튜플로 묶어서 반환하는 함수이다. enumerate는 단순 출력문으로는 그 결과를 확인할 수 없기때문에 반드시for문과 같은 반복문을 사용하여 결과값을 확인해야한다.

range함수는 숫자의 더미를 생성해주는 함수이다. 특정범위를 지정할 수 있어, 범위지정자로도 불리며, 리스트를 만들때, 반복문을 실행할때 등등 굉장히 많이 사용되는 함수이다. 또한 마찬가지로 일반 출력문으로는 더미를 확인할 수 없으므로, 리스트나 튜플등으로 형변환해주거나 반복문을 사용하여 더미숫자들을 확인해야한다. 

len은 전달된 객체의 요소 길이값을 출력해주는 함수이며 숫자뿐만 아니라 문자에서도 사용이 가능하다.

#시퀀스의 내장함수

#sorted(): 전달된 반복가능 객체의 요소를 오름차순 정렬
#(메소드.sort()결과와 동일)

li2 = [5,3,2,9,0,1,4,7,3]
print(sorted(li2),type(sorted(li2))) #오름차순 정렬되어 작은 수 부터 정리
print(li2) #하지만 리스트만 출력하면 정렬 취소됨
#메소드.sort()는 원본자체의 정렬을 바꾸지만 sorted()함수는 원본자체를 바꾸진못함. 출력시에만 오름차순

li2.sort()
print(li2) #메소드는 원본자체가 변경된것을 알 수 있음

#sorted(reverse = True): 내림차순

print(sorted(li2, reverse = True)) #내림차순
print(li2) #내림차순도 마찬가지로 원본자체를 바꾸지 못함

print()

#zip
#전달된 여러개의 반복가능 객체의 각 요소를 튜플로 묶어서 반환하는 함수
#만약 전달된 반복가능 객체의 길이가 서로 다르면 길이가 짧은 반복가능 객체를 기준으로 동작
name = ['짱구' ,'철수','유리','맹구']
score = [74, 100, 90, 59]

print(f"{name[0]}의 점수는 {score[0]}점입니다")
print(f"{name[1]}의 점수는 {score[1]}점입니다")
print(f"{name[2]}의 점수는 {score[2]}점입니다")
print(f"{name[3]}의 점수는 {score[3]}점입니다")
 #두개의 컬렉션 값을 동시 출력하려면 이런방법으로 기존에 출력해야했음

print()

#zip와 반복문 사용

for i in range(len(name)):
  print(i) #길이 변환 함수로 name리스트의 값만큼 반복할 수 있도록 range로 다시 한번 감싸줌(총4번 반복)
  print(f"{name[i]}의 점수는 {score[i]}점입니다.") #rang때문에 순서대로 인덱스번호가 자동생성됨

print()

#zip
for sutdent in zip(name, score):
  print(sutdent) #튜플로 묶여있기때문에 언패킹을 하여 풀어줌!

print()

for sutdent, point in zip(name, score):
  print(f"{sutdent}의 점수는 {point}입니다.")

print()

name = ['짱구' ,'철수','유리','맹구', '훈이']
score = [74, 100, 90, 59]

for student , point in zip(name, score):
  print(f"{student}의 점수는 {point}") #두개의 길이가 맞지 않아도 짧은 리스트 기준으로
  #출력되기때문에 오류나지 않음.

# for i in range(len(name)):
#   print(i)
  # print(f"{name[i]}의 점수는 {score[i]}점입니다.")
  #zip를 쓰지않고 사용한 반복문의 경우에는 두개의 리스트 길이가 맞지않아서 오류가남

sorted는 전달된 반복가능 객체의 요소를 오름 차순으로 정렬하며, 리스트의 메소드인 sort와 같은 결과를 반환한다. 둘의 차이점은 메소드의 경우 원본자체의 정렬순서를 바꿀 수 있지만 내장함수의 경우, 원본자체의 정렬을 바꾸진 않는다.

zip는 전달된 여러개의 반복가능 객체의 각 요소를 튜플로 묶어서 반환하는 함수이다. 만약 전달된 반복가능 객체의 길이가 서로다르다면 길이가 짧은 반복가능 객체를 기준으로 동작한다.

 

내장함수 실습

#<실습>
#<실습>
#월별 일수 리스트가 있을때 1월~12월과 마지막을 같이 출력
#[출력결과]
#1월 : 31일
#...
#12월 : 31일

#<로직구성>
#1)day의 길이가 1~12개로 맞기 때문에 인덱스 번호를 사용
#2)인덱스 번호를 사용할 것이기때문에 enumerate()함수 사요
#3)enumerate()함수의 값 사용을 위해 for 반복문사용
#4)언패킹으로 값 나눠서 출력

day=[31,28,31,30,31,30,31,31,30,31,30,31]

for month, date in enumerate(day):
  month+=1
  print(f"{month}월 : {date}일")

print()

for month, date in enumerate(day):
  print(f"{month+1}월 : {date}일") #f-string안에서 +해줘도 됨

#<실습>_같은 문제 zip사용해서 풀기
#zip  사용

month = [1,2,3,4,5,6,7,8,9,10,11,12]
day=[31,28,31,30,31,30,31,31,30,31,30,31]

for i,j in zip(month, day):
  print(f"{i}월 : {j}일")

 


학습일기

파이썬의 내장함수 중에서 가장 신기하기도 하고, 실제로 문제풀면서 가장 많이 사용했던 함수는 enumerate와 zip였던것 같다. 객체안에 저장된 값들을 반복문을 사용해 새롭게 조합하여 출력하는 과정이 재밌으면서도 활용도가 높다고 생각했다. 가끔 인덱스 번호가 0번부터 출력된다는걸 까먹어서 1부터 출력해야하는 경우에 +1을 해야한다는걸 가끔 까먹긴하지만...그래도 꾸준히 연슴하면 되겠지...!!!