파이썬 문법 :: 내장함수 (map, input, zip, enumerate, eval)
프로그래머스 기초 코딩문제를 복습 하면서 정리한 [파이썬 내장함수]
목차
· 내장함수
1. map
2. input
3. zip
4. enumerate
5. eval
내장함수
* 내장함수와 내장 메서드는 파이썬 언어 자체에 포함이 되어있기에 import를 하지않아도 사용 가능
1. map(function, iterable, iterable2,,,,)
상황 : iterable(리스트, 튜플, 문자열 등)의 각 요소에 특정 함수를 적용할때 사용함
효과 : 반복문을 사용하지 않아도됨
공식 : 파이썬 공식 문서 - map 함수
문법 : map(function, iterable, iterable2, iterable3,,,,, )
첫번째 매개변수 function : 두번째 iterable 값을 적용시킬 함수
두번째 매개변수 iterable : 리스트, 튜플, 문자열 등 반복 가능한 객체
리턴값: iterator인 map 객체를 반환하기 때문에, 필요에 따라 list(map(~)) , tuple(map(~))등으로 형 변환하여 사용해야함 (map 함수 자체만으로는 리스트나 튜플처럼 값을 반환하는게 아님)
예시 : map(function, iterable, iterable2) - 리스트가 2개일때
① def로 함수선언
list1 = [1, 2, 3, 4, 5]
list2 = [6, 7, 8, 9, 10]
def add(x, y):
return x + y
sum_list = list(map(add, list1, list2))
print(sum_list) #출력 [7, 9, 11, 13, 15]
② map함수 안에 lambda로 한줄 함수를 포함시킨 경우
list1 = [1, 2, 3, 4, 5]
list2 = [6, 7, 8, 9, 10]
sum_list = list(map(lambda x, y: x + y, list1, list2))
print(sum_list) #출력: [7, 9, 11, 13, 15]
③ zip함수와 for문을 사용하는 경우
list1 = [1, 2, 3, 4, 5]
list2 = [6, 7, 8, 9, 10]
sum_list = [x+y for x, y in zip(list1, list2)]
print(sum_list) #출력: [7, 9, 11, 13, 15]
이렇게 정말 다양한 경우의 수가 있다. .
중요한 것은, map함수를 쓰는 것은 for문이 내장되어 있는 효과가 있다는 것
★ map 과 동일한 방식 비교
① 정석 : num 변수 선언 - for문
def solution(number):
num = 0
for i in number :
num += int(i)
return num % 9
② sum 함수 안에, for문을 사용하고, 값을 int(i)로 형변환해서 리스트에 저장
def solution(number):
return sum([int(i) for i in number]) % 9
③ sum 함수 안에, map 함수를 사용해서, number(iterable) 값을 int 형변환함을 의미
def solution(number):
return sum(map(int, number)) % 9
2. input([promt])
상황 : 입력값을 받을 때
효과 : 사용자가 값을 직접 입력할 수 있음
효과 : 사용자가 값을 직접 입력할 수 있음
문법 : 값을 저장할 변수 = input([promt])
첫번째 매개변수인 promt : 생략 가능하며, 사용자에게 보여줄 메세지를 지정하는 부분임.
" ~ " 큰 따음표 혹은 작은 따음표 안에 메세지를 쓰면됨
리턴값 : 사용자가 어떤 값을 입력하던지 간에, 문자열(str) 형태로 반환 및 저장됨
리턴값 : 사용자가 어떤 값을 입력하던지 간에, 문자열(str) 형태로 반환 및 저장됨
예시
input_string = input("문장을 입력하시오 : ")
up_string = input_string.upper()
print(up_string)
위 코드를 실행했을때, 입력창이 뜬다.
입력한 값이 input_string 변수에 담기게 되는 것
이처럼 입력값을 찢거나(split()), 합치거나(join()), 반복시키거나 등등 다양한 방법으로 실행시킬 수 있다.
3. zip(iterable1, iterable2, ...)
상황 : 두개 이상의 iterable을 합치고 싶을때
효과 : 각 iterable에서 동일한 인덱스의 요소들을 묶어서 튜플로 반환
효과 : 각 iterable에서 동일한 인덱스의 요소들을 묶어서 튜플로 반환
공식 : 파이썬 공식 문서 - zip 함수
문법 : 변수 = zip(iterable1, iterable2, ...)
리턴값 : zip 객체로 iterator 를 반환하기 때문에, 필요에 따라 list(zip(~)) , tuple(zip(~))등으로 형 변환하여 사용해야함
예시
num1 = [1, 2, 3]
num2 = ['one', 'two', 'three']
all = list(zip(num1, num2))
print(all) #출력 [(1, 'one'), (2, 'two'), (3, 'three')]
a, b, c = list(zip(num1, num2))
print(a) #출력 (1, 'one')
print(b) #출력 (2, 'two')
print(c) #출력 (3, 'three')
my_string[i]의 인덱스가 i 이고
parts[i] 가 [s, e] 형태일때 zip을 사용해서 아래와 같이 표현할 수 있다.
return ''.join([str[idx[0]:idx[1]+1] for str, idx in zip(my_strings, parts)])
만약, 이 코드에서 for str, s, e in zip(my_strings, parts)로 인자를 3개받으면 valueerror 오류가 뜬다
ValueError: not enough values to unpack (expected 3, got 2)
return ''.join([str[s:e+1] for str, (s, e) in zip(my_strings, parts)])
이렇게는 표현 가능
4. enumerate(iterable, start=0)
문제 : 프로그래머스 Day 5 - 코드 처리하기
상황 : 반복문에서 iterable의 각 요소에 대해 인덱스와 값을 함께 쓸때
효과 : 각 요소에 대해 (인덱스, 값) 형태의 튜플을 생성하여 제공해서, 반복문에서 요소의 인덱스와 값 둘다 쓸때 유용함
문법 : 변수 = enumerate(iterable, start=0)
두번째 매개변수인 start : 생략 가능, 기본값은 인덱스 0, 인덱스의 시작값을 지정하는 역할
리턴값 : iterator인 enumerate 객체를 반환하기 때문에, 필요에 따라 list(enumerate(~)) , tuple(enumerate(~))등으로 형 변환하여 사용해야함
예시
seasons = ['Spring', 'Summer', 'Fall', 'Winter']
list(enumerate(seasons))
#출력 [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
list(enumerate(seasons, start=1))
#출력 [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
5. eval(expression[, globals[, locals]])
상황 : 문자열을 표현식으로 바꿔서 실행할 때
효과 : "3+4"로 이뤄진 문자열을 넣더라도, 사칙연산을 해줌
(원래 문자열로 싸여진 표현식은 사칙연산이 안됨. 문자열 그자체로 보존이됨)
주의 : 혹여나 안전하지 않은 입력값(표현식)을 eval 함수로 실행시키면, 보안 문제가 발생하므로, 입력값을 받을때는 eval 함수를 안쓰는게 좋음
공식 : 파이썬 공식 문서 - eval 함수
문법 : 변수 = eval(expression[, globals[, locals]])
① expression (필수) : 평가할 파이썬 표현식을 나타내는 문자열. (입력값 only 문자열)
② globals (선택) : 무조건 딕셔너리로만 넣어야함. 기본값은 현재 모듈의 전역 네임스페이스
③ locals (선택) : 어떤 매핑 객체든 괜찮. 기본값은 현재 모듈의 지역 네임스페이스.
리턴값 : 주어진 표현식을 실행한 결과를 반환
예시
result = eval('2 + 3')
print(result) # 출력: 5
댓글
댓글 쓰기