Python

파트7. for 문과 if문을 한번에

누구용 2022. 7. 22. 10:40

정수를 담은 리스트 mylist를 입력받아, 이 리스트의 원소 중 짝수인 값만을 제곱해 담은 새 리스트를 리턴하는 solution함수를 완성해주세요. 예를 들어, [3, 2, 6, 7]이 주어진 경우

  • 3은 홀수이므로 무시합니다.
  • 2는 짝수이므로 제곱합니다.
  • 6은 짝수이므로 제곱합니다.
  • 7은 홀수이므로 무시합니다.

따라서 2의 제곱과 6의 제곱을 담은 리스트인 [4, 36]을 리턴해야합니다.

제한 조건

  • mylist는 길이가 100이하인 배열입니다.
  • mylist의 원소는 1이상 100 이하인 정수입니다.

제출한 정답

def solution(mylist):
    filter_list = list(filter(lambda x: x%2 == 0, mylist))
    answer = list(map(lambda x: x**2, filter_list))
    return answer

예측 오답

def solution(mylist):
    answer = []
    for number in mylist:
        if number % 2 == 0:
            answer.append(number**2)
    return answer

풀이 정답

def solution(mylist):
    answer = [number**2 for number in mylist if number % 2 == 0]
    return answer

 

뭔가 방법이 있었던 기억이 있는데 기억이 나지 않아 filter 후에 map을 사용해 보았다.
List comprehension의 [val for val in iterable (if filter)] 괄호 안의 for 문에서 if 문을 사용하면 조건문으로 필터링 할 수 있다.
If 문을 여러개 사용할 수도 있는데 이떄는 if 문을 연속으로 사용해주면 된다.
[val for val in Iterable if val % 3 == 0 if val % 5 == 0] # if val % 3 == 0 and val % 5 == 0 와 같은 동작이 이루어진다.