case_1 = ["A", "B", "C"]
case_2 = ["D", "E", "F"]
## One dimensional
# general
s = []
for i in case_1:
for j in case_2:
s.append(i+j)
print("One dimensional-General:", s)
# list comprehension
s = [i+j for i in case_1 for j in case_2]
print("One dimensional-list comprehension:", s)
## Two dimensional
# general
s = []
for j in case_2:
line = []
for i in case_1:
line.append(i+j)
s.append(line)
print("Two dimensional-General:", s)
# list comprehension
s = [[i+j for i in case_1] for j in case_2]
print("Two dimensional-list comprehension:", s)
#One dimensional-General: ['AD', 'AE', 'AF', 'BD', 'BE', 'BF', 'CD', 'CE', 'CF']
#One dimensional-list comprehension: ['AD', 'AE', 'AF', 'BD', 'BE', 'BF', 'CD', 'CE', 'CF']
#Two dimensional-General: [['AD', 'BD', 'CD'], ['AE', 'BE', 'CE'], ['AF', 'BF', 'CF']]
#Two dimensional-list comprehension: [['AD', 'BD', 'CD'], ['AE', 'BE', 'CE'], ['AF', 'BF', 'CF']]
03 enumerate & zip
enumerate
list의 element를 추출할 때 번호를 붙여서 추출
zip
여러 개의 list의 값들을 병렬적으로 추출
alist = ["a1", "a2", "a3"]
blist = ["b1", "b2", "b3"]
for i, (a, b) in enumerate(zip(alist, blist)):
print(i, a, b)
# 0 a1 b1
# 1 a2 b2
# 2 a3 b3
04 lambda & map & reduce
04-1 lambda
lambda
함수의 이름 없이 함수처럼 쓸 수 있는 익명 함수
# general function
def f(x, y):
return x + y
print("general function:", f(1, 4))
# lambda function
f = lambda x, y: x + y
print("lambda function:", f(1, 4))
lambda의 문제점
문법이 어려움
테스트의 어려움
문서화 docstring의 지원 미비
코드 해석의 어려움
→ 위와 같은 이유로 PEP 8에서는 lambda의 사용을 권장하지 않지만, 여전히 많이 사용되고 있음
04-2 map
map
list의 요소들을 지정된 함수에 적용(mapping)
ex = [1, 2, 3, 4, 5]
print(map(lambda x: x+x, ex)) # <map object at 0x7fdabf071040>
print(list(map(lambda x: x+x, ex))) # [2, 4, 6, 8, 10]
f = lambda x: x ** 2
print(map(f, ex)) # map object
for i in map(f, ex):
print(i) # 실행 시점에 값을 생성
04-3 reduce
reduce
반복 가능한 객체(iterable object) 내 각 요소를 연산한 뒤 이전 연산 결과들에 누적해서 반환해 주는 함수
from functools import reduce
print(reduce(lambda x, y: x + y, [1, 2, 3, 4, 5])) # 1 + 2 + 3 + 4 + 5 = 15
댓글