본문 바로가기
Python

파이썬 - 내장 함수 (enumerate/ filter / map/ zip)

by IT두잇 2022. 3. 2.

enumerate : 순서가 있는 자료형을 인덱스 값과 함께 출력해주는 함수

※ 사용가능한 자료형: 리스트, 튜플, 문자열

※ enumerate 함수는 보통 for문과 함께 사용됩니다. 

작성법) for 변수 1, 변수 2 in enumerate ([리스트])

for i, name in enumerate(['body', 'foo', 'bar']):
    print(i, name)

결과값:

0 body

1 foo

2 bar

 

위와 같이 입력 시 body, foo, bar이 인덱스 값과 함께 순서대로 출력된 것을 보실 수 있습니다. 

for문처럼 반복되는 구간에서 객체의 위치 값을 알아보고 싶을 때 매우 유용하다고 하네요.

 


 

< 연습문제  1 >

enumerate 함수를 이용하여 아래와 같이 출력하시오.

1번 학생 이름 a
2번 학생 이름 b
3번 학생 이름 c
4번 학생 이름 d

names = ['a', 'b', 'c', 'd']
for i, name in enumerate (names):
    print(f'{i}번 학생 이름: {name}')

 


filter : 반환 값이 참인 것만 걸러서 출력해주는 함수

 

[1, -3, 2, 0, -5, 6] 리스트의 숫자에서 양수만 출력하는 filter 함수를 작성해보았습니다.

print(list(filter(positive, [1, -3, 2, 0,-5, 6])

 

위 함수는 lambda를 이용해서 코드를 쓸 수 있습니다 :)

작성법) lambda 변수: 원하는 변수의 출력 조건

lamda 뒤의 변수는 x, a, num 등 원하는 변수로 작성하시면 됩니다.

list(filter(lambda x: x > 0, [1, -3, 2, 0, -5, 6])

 


 

< 연습문제  1 >

filter 함수를 이용하여 [1,2,3,4,5,6,7,8,9,10]에서 짝수만 출력해보자

(1) is_even() 함수 이용

def is_even(a):
    return a % 2 == 0
 
list(filter(is_even, [1,2,3,4,5,6,7,8,9,10])

(2) lambda 함수 이용

list(filter(lambda x: x % 2 == 0, [1,2,3,4,5,6,7,8,9,10]))

결과값: [2, 4, 6, 8, 10]

 

< 연습문제  2 >

filter와 lambda를 이용하여 아래 리스트에서 3글자인 단어만 출력해보자

li = [ 'yellow', 'red', 'orange', 'blue', 'hat', 'cat' ]

list(filter(lambda x: len(x) == 3, li))

여기서 len(x)는 입력값 x의 길이를 돌려주는 함수입니다.

결과값: ['red', 'hat', 'cat']

 

 


map : 자료형의 요소에 대한 함수 수행 결과를 출력하는 함수

※ 사용가능한 자료형: 함수(f), 반복 가능한 자료형( dictionary, set, str, range )

def two_times(x):
    return x * 2

list(map(two_times, [1,2,3,4]))
더보기

결과값:

[2, 4, 6, 8]

map 함수도 lambda 를 사용해 간략화 할 수 있다.

 

여기서 filter와 map의 차이점!

filter에는 리턴값이 참/거짓인 함수를 입력한다

 

 


< 연습문제  1 >

리스트 [1,2,3,4]의 2 제곱된 값을 출력해보자.

list(map(lambda x: x ** 2, [1,2,3,4]))

결과값: [1, 4, 9, 16]

 


zip: 동일한 개수로 이루어진 자료형을 묶어주는 역할

list(zip([1,2,3], [4,5,6]))
더보기

결과값:

[ (1, 4),  (2, 5), (3, 6) ]

list(zip('abc', 'def'))
더보기

결과값:

[ ('a', 'd'),  ('b', 'e'), ('c', 'f') ]

 


< 연습문제  1 >

아래 리스트를 '이름, 나이, 취업상태' 로 묶어서 나열해보자.

name_list = ['홍길동', '김파랑', '이노랑']
age_list = [31, 45, 23]
job_list = ['직장인', '취업준비생', '회사원']

 

profile = zip(name_list, age_list, job_list)
list(profile)

 

결과값: [('김은하', 23, '대학생'), ('이우주', 28, '취업준비생'), ('박태양', 35, '회사원')]