Python map() , zip()

Python 의 map() 과 zip()

- map( ) : https://docs.python.org/ko/3.7/library/functions.html#map


map(functioniterable...)
iterable 의 모든 항목에 function 을 적용한 후 그 결과를 돌려주는 이터레이터를 돌려줍니다. 추가 iterable 인자가 전달되면, function 은 그 수 만큼의 인자를 받아들여야 하고 모든 이터러블에서 병렬로 제공되는 항목들에 적용됩니다. 다중 이터러블의 경우, 이터레이터는 가장 짧은 이터러블이 모두 소모되면 멈춥니다. 함수 입력이 이미 인자 튜플로 배치된 경우에는, itertools.starmap() 를 보세요.



- zip() : https://docs.python.org/ko/3.7/library/functions.html#zip


zip(*iterables)
각 iterables 의 요소들을 모으는 이터레이터를 만듭니다.
튜플의 이터레이터를 돌려주는데, i 번째 튜플은 각 인자로 전달된 시퀀스나 이터러블의 i 번째 요소를 포함합니다. 이터레이터는 가장 짧은 입력 이터러블이 모두 소모되면 멈춥니다. 하나의 이터러블 인자를 사용하면, 1-튜플의 이터레이터를 돌려줍니다. 인자가 없으면, 빈 이터레이터를 돌려줍니다.

map(str , [1,2,3]) 의 결과는
['1','2','3']

1,2,3 이라는 숫자가 각각 str함수를 거쳐서 문자열 1,2,3 으로 바뀐다. 
만약 x2 라는 함수를 아래와 같이 정의하면
def x2(x):
    return x*2

map(x2, [1,2,3]) 의 결과는 
[2,4,6]

map의 인자가 iterable 하기만 하면 됨.

zip은 ['a','b','c'] 와 [1,2,3] 이라는 2개의 list가 있으면 각 인덱스 끼리 합쳐준다.
zip(['a','b','c'], [1,2,3]) 의 결과는
[('a',1),('b',2),('c',3)] 이다. (하지만, 3.5 버전에서 해보니 zip 오브젝트로만 나온다. 좀 더 확인 필요함)

dict(zip(['a','b','c'], [1,2,3])) 의 결과는 
'a':1 , 'b':2, 'c':3 이다.

map object, zip object 로 나오는 것들은 iterator를 반환하니 내용을 확인할려면 for문을 써서 확인해보면 가능.



댓글

이 블로그의 인기 게시물

C#에서 포인터 사용

WPF RichTextBox 와 Document의 바인딩

WPF 이미지위에 라인 그리기(WPF DrawLine on exist Image)