728x90
문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/181835
내 풀이
def solution(arr, k):
if k%2 != 0:
arr = list(map(lambda x:x*k, arr))
else:
arr = list(map(lambda x:x+k, arr))
return arr
# return list(map(lambda x:x+k, arr)) if k%2 else list(map(lambda x:x*k, arr))
문제는 쉬운 문제였다. 처음에는 numpy 배열을 사용해 풀어볼까 싶었지만,
그렇게하면 결과에서 다시 numpy -> list 로 바꿔야하는 불편함이 있으므로, 친구의 의견을 받아들여 다른 방법으로 풀어봤다!
map 함수와 lambda 함수의 조합
람다는 함수의 간단한 형식을 의미한다. (익명함수)
예를 들어,
# 두 수를 더하는 함수
def hap(x, y):
return x + y
hap(10, 20)
# 30
##### 람다 형식으로 써보자
(lambda x, y: x+y)(10, 20)
람다함수는 다양하게 활용할 수 있는데..
map( )
map(함수, 리스트)
map은 함수와 리스트를 인자로 받는데, 리스트로부터 원소를 하나씩 꺼내서 함수에 적용시킨다.
list(map(lambda x: x ** 2, range(5)))
# [0, 1, 4, 9, 16]
위와 같이, 원소에 적용할 함수를 첫 인자, 다음 인자에 리스트 범위 혹은 리스트 자체를 너어주면 된다.
reduce( )
reduce(함수, 시퀀스)
reduce 함수의 형식은 위와 같은데, 시퀀스(문자열, 리스트, 튜플)의 원소들을 누적하여 함수에 적용시킨다.
from functools import reduce # 파이썬 3에서는 써줘야한다.
reduce(lambda x, y: x + y, [0, 1, 2, 3, 4])
# 10
즉, 0 + 1 + 2 + 3 + 4를 수행한다는 의미이다!
reduce(lambda x, y: y + x, 'abcde')
# 'edcba'
위의 예제는 y+x를 적용하였으므로, edcba 의 값이 나온다. (참 어렵군^^)
filter( )
filter(함수, 리스트)
filter 함수는 리스트의 원소들을 함수에 적용시켜 결과가 참인 값들로 새로운 리스트를 만들어준다.
# 0부터 9의 리스트 중에서 5보다 작은 것들만 새로운 리스트로 만드는 예제
list(filter(lambda x: x < 5, range(10)))
# [0, 1, 2, 3, 4]
# 0부터 9까지 중 홀수만 돌려줌
list(filter(lambda x: x % 2, range(10)))
# [1, 3, 5, 7, 9]
문제에서의 예시를 확인해보자!
리스트의 모든 원소에 곱셈을 한다고 생각해보자.
(물론 numpy 배열을 사용하면 쉽게 해결할 수 있다. )
1. for문을 사용하여 리스트의 모든 원소 연산
arr = [1, 2, 3]
####### for문 사용
answer = []
for i in arr:
answer.append(i*3)
print(answer)
# answer = [ i * 3 for i in arr ] 과 같다.
# [3, 6, 9]
2. map과 lambda를 사용하여 리스트의 모든 원소 연산
arr = [1, 2, 3]
####### map과 lambda 사용
arr = list(map(lambda x:x*3, arr))
# [3, 6, 9]
3. numpy array를 사용하여 리스트의 모든 원소 연산
arr = [1, 2, 3]
####### numpy 배열 활용
import numpy as np
arr = np.array(arr)
print(arr*3)
# [1 2 3]
# 출력이 numpy array 형식이다.
이처럼 다양한 방법을 통해 리스트 원소 연산을 할 수 있지만,
map과 lambda를 사용하는 방법이 매우 간편하므로, 자주 사용해봐야겠다.
끄읏-!
728x90
'코딩테스트 > PYTHON' 카테고리의 다른 글
[프로그래머스][PYTHON] Lv. 0 문자열 정수의 합 (0) | 2024.02.05 |
---|---|
[프로그래머스][PYTHON] Lv. 0 수열과 구간 쿼리 1 (0) | 2024.02.03 |
[프로그래머스][PYTHON] Lv. 0 전국 대회 선발 고사 ( + 딕셔너리 설명) (0) | 2024.01.31 |
[프로그래머스][PYTHON] Lv. 0 가까운 1 찾기 (0) | 2024.01.30 |
[프로그래머스][PYTHON] Lv. 0 배열 만들기 1 (0) | 2024.01.30 |