hojeomi blog
3-2. Pythonic Code 본문
1. split & join¶
In [31]:
# join
colors = ['red','yellow','blue']
a = '-'.join(colors)
a
Out[31]:
In [ ]:
In [ ]:
2. list comprehension¶
- 기존 리스트를 사용해서 간단히 다른 리스트를 만드는 기법
- 포괄적인 리스트, 포함되는 리스트라는 의미로 사용됨
- 일반적으로 for+append 보다 속도가 빠름
- 즉, 리스트에서 사용하는 함수를 한 줄로 표현할 수 있다.
In [32]:
result = [i for i in range(10) if i > 5] # list comprehension
result
Out[32]:
In [33]:
w1 = "hello"
w2 = "world"
# for i in w1:
# for j in w2:
result = [i+j for i in w1 for j in w2 if not(i==j)] # 필터(if)는 끝에
result[:5]
Out[33]:
In [34]:
# 2차원 -> 뒤가 먼저 작동함
# for j in w2:
# line = []
# for i in w1:
# line.append(i+j)
result = [[i+j for i in w1 if not(i==j)] for j in w2] # 필터(if)는 앞에
result[:5]
Out[34]:
In [ ]:
In [ ]:
3. enumerate & zip¶
- zip: 두 개의 리스트를 병렬적으로 추출
In [35]:
# enumerate
a = "abcd"
{v:i for i,v in enumerate(a)}
Out[35]:
In [36]:
# zip
a = [1,2,3]
b = ['a','b','c']
[[a,b] for a,b in zip(a,b)]
Out[36]:
In [37]:
[c for c in zip(a,b)] # 그냥 하면 튜플 타입으로 묶어줌
Out[37]:
3-a. 예제) 세 학생의 평균 점수¶
In [38]:
math = (100,57,89)
kor = (34,67,99)
eng = (100,32,46)
[sum(value)/3 for value in zip(math, kor, eng)]
Out[38]:
3-b. enumerate & zip 함께 쓰기¶
In [39]:
alist = ['a1','a2','a3']
blist = ['b1','b2','b3']
for i, values in enumerate(zip(alist, blist)):
print(i, values)
In [40]:
list(zip(alist, blist)) # 이거에 enumerate한 것 ↑
Out[40]:
In [ ]:
In [ ]:
4. lambda & map & reduce¶
- PEP8에서는 lambda를 지양함
이유: 어려운 문법, 테스트의 어려움, 코드 해석의 어려움, 이름이 존재하지 않는 함수의 출현
map은 실행시점의 값을 생성, 메모리 효율적
- reduce는 두 개씩 처리 후, 누적해서 계속 두 개씩 처리
In [43]:
# map
ex = [1,2,3,4,5]
f = lambda x: x**2
list(map(f, ex)) # ex의 값이 한 개씩, f로 들어가서, 한 개씩 반환
Out[43]:
In [44]:
# 직관적이지 않은 map을 다르게 쓰는 방법이 좋다.
[f(values) for values in ex]
Out[44]:
In [47]:
# reduce
from functools import reduce
print(reduce(lambda x,y: x+y, [1,2,3,4,5])) # (((1+2)+3)+4)+5
In [ ]:
In [ ]:
5. iterable object¶
- generator 개념 알기
- 시퀀스(sequence) 자료형에서 데이터를 순서대로 출력하는 경우가 있음 -> interable object
- 내부적으로 _iter_와 _next_가 사용됨
- iter()와 next() 함수로 iterable 객체를 iterable object로 사용
- iter 배우는 이유: generator를 위해
In [63]:
cities = ['jeju','daejeon']
address = iter(cities) # 각각의 요소들이 다음 요소의 주소를 가지고 있음
print(address)
In [64]:
a = next(address) # 주소로 불러줌 -> 다음 주소로 연결
print(a)
In [65]:
next(address)
Out[65]:
In [66]:
next(address) # 한 개씩 빠지고, 다 빠지면 에러
In [ ]:
In [ ]:
6. generator¶
- iter와 연결됨
- 전에는 주소만 가지고 있다가 element가 사용되는 시점에 값을 메모리에 반환
- 필요할 때만 쓰기 때문에 데이터가 많으면 시간 및 용량 효율성을 높일 수 있음
In [76]:
def generator_list(values):
result = []
for i in range(values):
yield i # yield는 호출해주는 함수
In [77]:
generator_list(5) # 주소만 가지고 있다가,
Out[77]:
In [79]:
for a in generator_list(5): # print 등 사용되는 시점에 yield를 통해 한 개씩 호출
print(a)
6-a. generator comprehension¶
- list comprehension과 유사한 형태로 generator형태의 list 생성
- generator expression이라고도 불림
- [] 대신 () 사용
- generator에 저장된 값을 쓰기 위해서는, for 또는 list 등을 통해 불러줌
In [101]:
gen_ex = (n*n for n in range(5))
print(gen_ex)
In [102]:
for a in gen_ex:
print(a)
🎈 Question. 한 번 쓰면 사라지나?¶
In [103]:
for a in gen_ex:
print(a)
In [104]:
list(gen_ex)
Out[104]:
In [ ]:
In [ ]:
7. function passing arguments¶
- 함수에 입력되는 arguments의 다양한 형태
1) Keyword arguments
2) Default arguments
3) Variable-length arguments
In [ ]:
'AI > Course' 카테고리의 다른 글
Day 5-1. File / Exception / Log Handling (0) | 2021.01.22 |
---|---|
4-1. 파이썬 OOP(객체 지향 프로그래밍) (1) | 2021.01.22 |
Day 3-1. Python Data Structure (0) | 2021.01.20 |
Day 2. 파이썬 기초 문법 (2) | 2021.01.19 |
Day 1. 파이썬 개요 (0) | 2021.01.18 |
Comments