- 기존 list를 사용하여
간단히 다른 list를 만드는 기법
- 포괄적인 list, 포함되는 list라는 의미로 사용됨
- 파이썬에서
가장 많이 사용되는 기법 중 하나
- 일반적으로 for + append 보다 속도가 빠름
filter : if not(i==j)일 때만 i+j에 값이 들어간다.
-> AA 생기지 않음
- list의 element를 추출할 때 번호를 붙여서 추출
for i, v in enumerate("ABC"): # i : index , v : value
print("{0} \t {1}".format(i, v)) # \t : tab
0 A
1 B
2 C
my_str = "ABCD"
{v: i for i, v in enumerate(my_str)}
# {'A': 0, 'B': 1, 'C': 2, 'D': 3}
text = "Samsung Group is a South Korean multinational conglomerate headquartered in Samsung Town, Seoul."
{i: v.lower() for i, v in enumerate(text.split())}
{0: 'samsung',
1: 'group',
2: 'is',
3: 'a',
4: 'south',
5: 'korean',
6: 'multinational',
7: 'conglomerate',
8: 'headquartered',
9: 'in',
10: 'samsung',
11: 'town,',
12: 'seoul.'}
set_text = list(set(text.split()))
{v.lower(): i for i, v in enumerate(set_text)}
{'multinational': 0,
'south': 1,
'a': 2,
'samsung': 3,
'korean': 4,
'group': 5,
'in': 6,
'conglomerate': 7,
'headquartered': 8,
'town,': 9,
'seoul.': 10,
'is': 11}
- 두 개의 list의 값을 병렬적으로 추출
alist = ["a1", "a2", "a3"]
blist = ["b1", "b2", "b3"]
[[a, b] for a, b in zip(alist, blist)]
# [['a1', 'b1'], ['a2', 'b2'], ['a3', 'b3']]
[c for c in zip(alist, blist)]
# [('a1', 'b1'), ('a2', 'b2'), ('a3', 'b3')]
math = (100, 90, 80)
kor = (90, 90, 70)
eng = (90, 80, 70)
[sum(value) / 3 for value in zip(math, kor, eng)]
# [93.33333333333333, 86.66666666666667, 73.33333333333333]
alist = ["a1", "a2", "a3"]
blist = ["b1", "b2", "b3"]
for i, values in enumerate(zip(alist, blist)):
print(i, values)
0 ('a1', 'b1')
1 ('a2', 'b2')
2 ('a3', 'b3')
zip(alist, blist) # generator 나중에 나옴
# <zip at 0x1ffa8754480>
list(zip(alist, blist))
# [('a1', 'b1'), ('a2', 'b2'), ('a3', 'b3')]
list(enumerate(zip(alist, blist)))
# [(0, ('a1', 'b1')), (1, ('a2', 'b2')), (2, ('a3', 'b3'))]
Python3부터 권장하지는 않으나 여전히 많이 쓰임
- 함수 이름 없이, 함수처럼 쓸 수 있는 익명함수
- 수학의 람다 대수에서 유래
def f(x, y):
return x + y
f(1, 4) # 5
f = lambda x, y: x + y
f(10, 50) # 60
(lambda x, y: x + y)(10, 50)
# 60
up_low = lambda x: x.upper() + x.lower()
up_low('My Happy') # 'MY HAPPYmy happy'
up_low = lambda x: "-".join(x.split())
up_low("My Happy") # 'My-Happy'