* 내장 리스트 *
def devider(n):
i = 1
dv = []
while(i <= n ):
if (n%i == 0):
dv.append(i) i += 1
return dv
# 내장 리스트 방법
def devider2(n):
return [d for d in range(1, n+1) if n%d == 0 ]
sal = [1000, 2000,3000, 4000, 5000]
net = [(n - (n * 0.033)) for n in sal]
print (net)
data = [(70, 60), (80, 40), (30,55)]
ft = [c[0] for c in data]
print(sum(ft))
st = [c[1] for c in data]
print(sum(st))
조건부 내장 리스트
if를 붙여서 조건을 추가할 수 있다.
sal = [1000, 2000,3000, 4000, 5000]
net = [(n - (n * 0.033)) for n in sal if n > 3000]
print (net)
* generator *
내장 리스트에 [] 대신 ()을 사용하면 generator가 생성 된다.
generator 사용 이유 : 메모리 절약.
내장 리스트는 생성 시 메모리를 모두 잡지만,
generator는 사용 시점에 값이 계산 되며 이전 계산 값은 기억하지 않는다.
import sys
내장 list 생성 방식
myLL = [n *10 for n in range(1,10000)]
print(sys.getsizeof(myLL)) # range의 크기에 따라 메모리 증가 함.
generator 생성 방식
myGE = (n *10 for n in range(1,10000))
print(sys.getsizeof(myGE))
generator는 range의 크기에 따라 메모리 증가 하지 않음. 객체 메모리만 잡힐뿐 메모리에 담고 있지 않음.
때문에 bigdata 처리할 때 유용 함.
*Generator : 함수 기반 Generator와 내장 Generator*
함수기반 Generator
def fn() :
yield 10
yield 20
yield 30
yield 40
f = fn() # generator 객체
print(f)
print(next(f))
print(" ")
for i in f:
print(i)
yield를 이용한 함수기반 Generator 객체는 내장 Generator에 비해 복잡한 연산의 결과를 Generator로 만들때 유용하다.
def divider(n):
for i in range(1, n+1):
if (n%i == 0):
yield i
f = divider(10)
for n in f:
print(n)
함수기반 Generator를 이용하여 세금 3.3을 제한 실수령액을 계산
def net(n):
for i in n:
yield i - i*0.033
n = net(salary)
for i in n:
print(i)
비교 : 동등한 결과를 내는 기존 내장 generator
result = (n - n*0.033 for n in salary)
d ={'name': 'son', 'kor':100, 'eng':80, 'name': 'kang', 'kor':80, 'eng':100}
print([n for n in d.values() if type(n) == int])
2018년 6월 25일 월요일
Python 내장 리스트와 Generator
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기