1. map, filter
1) map
list와 같은 iterable 객체의 모든 element에 함수를 적용한 후 return 한다
map(function, iterable, ...)
>>> list1 = [1,2,3,4,5,6]
>>> list (map( lambda x : x//2 if x > 3 else x%2 , list1))
[1, 0, 1, 2, 2, 3]
다음은 여러개의 입력을 받아서 int형으로 변환하는 예제
a, b = map(int, input().strip().split(' '))
print(str(a//b) , str(a%b))
2) filter
list와 같은 iterable 객체의 모든 element에 함수를 적용한 후 True에 해당하는 element를 포함한 iterable을 return 한다
filter(function, iterable)
>>> list1 = [1,2,3,4,5,6]
>>> list(filter(lambda x : x < 4 , list1))
[1, 2, 3]
>>> list( x for x in list1 if x < 4) #위의 map과 동일한 기능을 하는 list comprehension.
# 다만 조건이 복잡해지면 함수를 통해 map을 사용하는 것이 유리
[1, 2, 3]
2. Zip 함수
1) zip 이란?
zip(*iterables)
여러개의 iterabled의 element를 하나씩 매핑하여 각각의 tuple로 합쳐준다
>>> name = ['kim','lee','park']
>>> score = [90,80,75,85]
>>> list(zip(name,score))
[('kim', 90), ('lee', 80), ('park', 75)]
2) unpack
* operator는 하나의 튜플을 각각의 element로 분리해준다. unpack이라고 한다.
def sum(a, b):
return a + b
input = (1, 2)
print(sum(*input)) # sum(1, 2) 와 동일한 의미
list 도 각각으로 분리한다
>>> mylist = [1,2,3]
>>> print(mylist)
[1, 2, 3]
>>> print(*mylist)
1 2 3
>>> print(*mylist,sep='')
123
>>> print(''.join(map(str,mylist))) #위와 동일한 의미
123
** 로도 사용가능하다
def minus(a, b):
return a - b
input = { 'b': 2, 'a': 1 }
print(minus(**input )) # minus(1, 2) 와 동일한 의미
3) 2차원 행렬 뒤집기 [출처 : programmers.co.kr : https://programmers.co.kr/learn/courses/4008/lessons/13318]
아래와 같은 2차원배열의 행과 열을 바꾸는것을 zip과 unpack operator로 구현할 수 있다.
1 2 3 1 4 7
4 5 6 => 2 5 8
7 8 9 3 6 9
>>> mylist = [ [1,2,3], [4,5,6], [7,8,9] ]
>>> list(map(list, zip(*mylist)))
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
4) 응용 : list 2개를 합치기
>>> a = [0, 1, 2, 3, 4]
>>> b = [0, 1, 2, 3, 4]
>>> list(x + y for x, y in zip(a,b))
[0, 2, 4, 6, 8]
'Tech-Pyhton' 카테고리의 다른 글
Numpy 설치하기 (1) | 2019.12.25 |
---|---|
[Python] Dictionary (0) | 2019.03.27 |
[Python] List Comprehension (0) | 2019.03.27 |
[Python] collections (0) | 2019.03.27 |
[Python] 유용한 파이썬 기능 (0) | 2019.03.10 |
댓글