AIFFEL 2021.12.30

Jinoung Kim·2021년 12월 30일

Node8

리스트 컴프리헨션(list Comprehension)

  • 리스트안에 함수를 구현하는 방법
my_list = ['a','b','c','d']
result_list = [(i, j) for i in range(2) for j in my_list]
print(result_list)
  • set, dictionay에 대해서도 적용 가능

제너레이터(Generator)

  • iterator 객체들이 가지고 있는 next 메서드와 같은 기능을 yield문을 사용하여 사용자 함수에서 구현
my_list = ['a','b','c','d']

# 인자로 받은 리스트로부터 데이터를 하나씩 가져오는 제너레이터를 리턴하는 함수
def get_dataset_generator(my_list):
    result_list = []
    for i in range(2):
        for j in my_list:
            yield (i, j)   # 이 줄이 이전의 append 코드를 대체했습니다
            print('>>  1 data loaded..')

dataset_generator = get_dataset_generator(my_list)
for X, y in dataset_generator:
    print(X, y)

실행 시간 측정

  • time 을 사용하여 실행시간 전, 후에 시간을 측정
import time

num_list = ['p1','p2', 'p3', 'p4']
start = time.time()

def count(name):
    for i in range(0, 100000000):
        a = 1 + 2
        
    print("finish:"+name+"\n")

for num in num_list:
    count(num)

print("time :", time.time() - start)

Multiprocessing(병렬처리)

  • CPU의 core별로 프로그램을 처리하도록 process를 여러개 만들어 수행 시간을 줄이는 기법
  • GPU는 자동으로 multi core를 사용하여 계산을 수행하고, 딥러닝 학습은 거의 GPU를 사용하기 때문에 이런 기법이 어떻게 활용가능한지 알아볼 필요가 있음
import multiprocessing
import time

num_list = ['p1','p2', 'p3', 'p4']
start = time.time()

def count(name):
    for i in range(0, 100000000):
        a = 1+2
    print("finish:"+name+"\n")
    

if __name__ == '__main__':
    pool = multiprocessing.Pool(processes = 4) #4개의 process
    
    #count('p1'), count('p2'), count('p3'), count('p4')
    pool.map(count, num_list) 
    
    pool.close() #더 이상 pool을 통해서 새로운 작업을 추가하지 않을 때 사용
    pool.join() #프로세스가 종료될 때까지 대기하도록 지시하는 구문

print("time :", time.time() - start)

람다 표현식 : 함수명이 없는 함수

  • 파이썬 함수는 인자값으로 함수를 사용할 수 있기 때문에 간단한 함수를 람다 표현식을 사용하여 인자로 활용
  • lambda 매개변수들: 식1 if 조건식 else 식2

list(map(lambda x: str(x) if x % 3 == 0 else x, data))
list(map(lambda x, y: x * y, data1, data2))
list(filter(lambda x: x > 5 and x < 10, data))
reduce(lambda x, y: x + y, data)

print( (lambda x,y: x + y)(10, 20) )    #30
  • 람다 표현식과 함께 자주 쓰이는 함수들 : map, filter, reduce
#map(변환 함수, 시퀀셜 데이터) : 두번째 인자로 넘어온 데이터가 담고 있는 모든 데이터에 변환 함수를 적용
result = list(map(lambda i: i * 2 , [1, 2, 3]))  #[2, 4, 6]
#reduce(집계 함수, 시퀀셜 데이터) : 집계 함수는 두개의 인자를 받아야 하는데요. 첫번째 인자는 누적자(accumulator), 두번째 인자는 현재값(current value)가 넘어온다.
from functools import reduce
reduce(lamda x, y: x + y, [0, 1, 2, 3, 4]) # 0과 1더해서 [1, 2, 3, 4] 만들고 다시 1, 2를 더해서 [3, 3, 4]를 만들고 3과 3을 더해서 [6, 4]만들고 6과 4를 더하고 종료
#filter(조건 함수, 시퀀셜  데이터) : 두번째 인자로 넘어온 데이터 중에서 첫번째 인자로 넘어온 조건 함수를 만족하는 데이터만을 반환
list(filter(lambda x: x < 5, range(10))) #[1, 2, 3, 4, 5]

파이썬

리스트 메서드

append(값) : 리스트 끝에 값을 추가, 리스트[len(리스트):] = [값] 과 같음
append(리스트) : 리스트 안에 리스트 추가
extend(리스트) : 리스트 끝에 다른 리스트 연결, 리스트[len(리스트):] = [값, 값] 과 같음
insert(인덱스, 값) : 리스트의 특정 인텍스에 값을 추가
pop() : 리스트 마지막 값을 삭제한 뒤 삭제한 값을 반환
pop(인텍스) : 해당 인덱스의 값을 삭제한 뒤 삭제한 값을 반환, del 리스트[인텍스] 와 같음
remove(값) : 리스트에서 특정 값을 삭제
index(값) : 리스트에서 특정 값의 인덱스를 구함
count(값) : 리스트에서 특정 값의 갯수를 구함
reverse() : 리스트에서 값의 순서를 반대로 함
sort() : 리스트의 값을 작은 순서대로 정렬(오름차순)
sort(reverse=True) : 내림차순으로 정렬
clear() : 리스트의 모든 값을 삭제, del 리스트[:] 와 같음
copy() : 리스트를 복사해서 새 리스트 생성

튜플 메서드

index, count 만 사용가능

리스트/튜플의 반복문

  • 'for 변수 in 리스트/튜플:' : 리스트/튜플의 모든 요소를 순서대로 변수로 꺼내온다.
  • enumerate(리스트/튜플)를 지정하면 인덱스와 값을 동시에 꺼내온다.
for i in 리스트:
for index, value in enumerate(리스트):
for index in range(len(리스트)):
while index < len(리스트):

리스트/튜플 표현식

  • [식 for 변수 in 리스트] -> [i+2 for i in range(10)]

  • [식 for 변수 in 리스트 if 조건식] -> [i+2 for i in range(10) if i % 2 == 0]

  • [식 for 변수 in 리스트 for 변수 in 리스트] -> [i * j for j in range(2, 10) for i in range(1, 10)]

  • [식 for 변수 in 리스트 if 조건식 for 변수 in 리스트 if 조건식] -> [i * j for j in range(2, 10) if j is not 0 for i in range(1, 10) if i % 3 == 0]

  • list(식 for 변수 in 리스트 if 조건식) -> list(i+2 for i in range(10) if i % 3 == 0)

  • tuple(식 for 변수 in 리스트 if 조건식)

문자열 메서드

replace
translate
split
join
upper
lower
lstrip, rstrip, strip
ljust, rjust, center
zfill
find, rfind
index, rindex
count

딕셔너리 메서드

0개의 댓글