본문 바로가기

Languages/Python

[파이썬 101] map 함수 (Iterator, Iterable)

728x90

 

Iterable

myList = [1, 2, 3, 4, 5]
myDict = {'name': '홍길동', 'age': 28, 'gender': 'male'}
myStr = 'Hello World!'
myRange = range(10)

for item in iter(myList):
    print(item, end=' / ')
print()

for item in myDict:
    print(item, end=' / ')
print()

for item in myStr:
    print(item, end=' / ')
print()

for item in myRange:
    print(item, end=' / ')
print()

 

 - iterable 객체 : 반복 가능한 객체

 - Iterable : list, dictionary, set, str, bytes, tuple, range ....

 - 반복문, range, enumerate 등에 사용할 수 있음

 

 

 

Iterator

myList = [1, 2, 3, 4, 5]
myDict = {'name': '홍길동', 'age': 28, 'gender': 'male'}
myStr = 'Hello World!'
myRange = range(10)

print(type(myList))
print(type(iter(myList)))

print(type(myDict))
print(type(iter(myDict)))

print(type(myStr))
print(type(iter(myStr)))

print(type(myRange))
print(type(iter(myRange)))

 

 - iterator 객체 : 값을 차례대로 꺼낼 수 있는 객체

 - iterable한 객체를 내장함수나 iterable 객체의 메소드로 생성할 수 있음

 - iter()를 사용할 수 있음 (iterable 객체는 __iter__ 메소드를 가지고 있음

 - __next__ 메소드를 통해 하나씩 값을 꺼낼 수 있음

 

 

 

map()

myList = [1, 2, 3, 4, 5]
myDict = {'name': '홍길동', 'age': 28, 'gender': 'male'}
myStr = 'Hello World!'
myRange = range(10)


def show_me_the_item(item):
    return f'__{item}__'


for result in map(show_me_the_item, myList):
    print(result, end=' ')
print()

for result in map(show_me_the_item, myDict):
    print(result, end=' ')
print()

for result in map(show_me_the_item, myStr):
    print(result, end=' ')
print()

for result in map(show_me_the_item, myRange):
    print(result, end=' ')
print()

 

 - map(function, iterable, ...)

 - iterable의 모든 항목에 function을 적용하여 나온 결과를 iterator로 반환.

 - 여러 iterable을 병렬로 넣어줄 수 있지만, 가장 짧은 것을 기준으로 실행됨

 

 

 

lambda 식 활용

myList = [1, 2, 3, 4, 5]

for result in map(lambda x : x * 2, myList):
    print(result, end=' ')

 

 - 익명함수 이용 가능

 

 

 

다수의 iterator

myList = [1, 2, 3, 4]
myDict = {1: 'one', 2: 'two', 3: 'three'}
myRange = range(1, 10)


def three(a, b, c):
    return a + b + c


print(list(map(pow, myList, myRange)))

print(list(map(three, myList, myDict, myRange)))

 

 - 순서대로 인자로 넣어줌

 

 

 

한 번에 여러 데이터 입력받기

a, b = map(int, input().split())
print(type(a))
print(a, b)
print()

a, b = map(float, input().split())
print(type(a))
print(a, b)
print()

a = [input() for _ in range(3)]
print(type(a))
print(a)
print()

a = [list(map(int, input().split())) for _ in range(3)]
print(type(a))
print(a)
print()

 

 - 다양한 응용 가능

 

 

 

참고
 - 파이썬 공식 문서
 - 점프 투 파이썬
반응형