-
파이썬 코드 스타일python 2020. 12. 19. 19:04
파이썬스러운 코딩방식을 알아보자, 파이썬 특유의 코드를 소개한다.
(참고: 데이터 과학을 위한 파이썬 프로그래밍, 최성철 지음)
(1) for문 없이 문자열을 나누고 합친다.
문자열.split(',') # 문자열을 쉼표(,)기준으로 분리하여 list 반환 문자열.split() # 문자열을 빈칸기준으로 분리하여 list 반환 ''.join(리스트) # 문자열로 구성된 list를 합쳐 하나의 문자열로 반환 '-'.join(리스트) # 구분자'-'를 추가하여 합친다. a=' 키움 증권 ' # 앞뒤 공백 a.rstrip() # 마지막문자에 한해 공백제거 ' 키움 증권' a='키움 증권;' a.rstrip(';') # 마지막문자에 한해 세미콜론(;)제거 '키움 증권'
(2) 지능형리스트
리스트와 for문을 한줄에 사용하여 처리속도를 향상시킬수있다.
조금더 자세한 설명은 다음 사이트를 참고하길바란다.
https://mingrammer.com/introduce-comprehension-of-python/
[i for i in range(10)] # [0,1,2,3,4,5.....9] [0 for i in range(10)] # [0,0,0,0,.......0] [[0 for j in range(3)]for i in range(5)] # [[0,0,0],...[0,0,0]] # 2차원 리스트 생성 [i for i in range(10) if i%2==0] # [0,2,4,6,8] 짝수만 필터링한다. [i if i%2==0 else 10 for i in range(10)] # [0,10,2,10,...8,10] else문사용시 if문을 앞으로 myList=['a','b','c',1,2,3] myListInt=[x for x in myList if isinstance(x, int)] # int형만 필터링 [i+j for i in value1 for j in value2] # 중첩반복문 [i+j for i in case1 for j in case2 if not(i==j)] # 중첩반복문 + 필터링 [[i+j for i in case1]for j in case2] # 2차원 리스트 [col for col in df.columns if 'cat' in col] # 'cat'이란 단어가 들어간 특정 컬럼 필터링 {i:j for i,j in enumerate('apple tomato'.split())} # enumerate사용하여 인덱스를 붙여 딕셔너리 생성가능 [(i,j) for (i,j) in enumerate('A,B,C'.split(','))] # [(0, 'A'), (1, 'B'), (2, 'C')] [sum(x) for x in zip((1,2,3),(10,20,30),(100,200,300))] # [111,222,333] # zip을 이용 [(i,a,b) for i,(a,b) in enumerate(zip(alist,blist))] # [(0, 'A1', 'B1'), (1, 'A2', 'B2'), (2, 'A3', 'B3')] {i:(a,b) for i,(a,b) in enumerate(zip(alist,blist))} # {0: ('A1', 'B1'), 1: ('A2', 'B2'), 2: ('A3', 'B3')}
선형대수학의 기초적인 연산을 파이썬 스타일 코드로 구현
행렬연산은 이해도 안되고 머리아프다. 그냥 numpy사용하자.
#벡터연산 [u+v+z for u,v,z in zip(u,v,z)] # 벡터 덧셈, [sum(x) for x in zip(u,v,z)] 와 동일하다. # 행렬연산 [[sum(j) for j in zip(*i)]for i in zip(matrix_a, matrix_b)] # 행렬의 덧셈 [[sum(a*b for a,b in zip(row_a,col_b)) for col_b in zip(*matrix_b)]for row_a in matrix_a] # 행렬의 곱셈 [[e for e in t]for t in zip(*matrix_b)] # 행렬의 전치
(3) 람다함수와 맵
람다함수: 함수의 이름없이, 함수처럼 사용할수있는 익명의 함수이다.
파이썬 2버전에서 많이 사용하였지만 최근에는 문법의 복잡성 때문에 권장하지 않는다.
하지만 기존코드를 이해하는데 필요하기 때문에 알아둘필요가 있다.
f1= lambda x, y:x+y f1(1,4) # 출력 5 f2= lambda x:x**2 f2(3) # 출력 9 ex=[1,2,3] list(map(f1,ex,ex) # 출력 [2,4,6] , [x+y for x,y in zip(ex,ex)] 와 동일하다. list(map(f2,ex)) # 출력 [1,4,9] list(map(lambda x:x**2 if x%2==0 else x, ex)) # [x**2 if x%2==0 else x for x in ex] 와 동일하다.
마침.
'python' 카테고리의 다른 글
파이썬 conda 및 pip 명령어 (1) 2020.12.20 파이썬 판다스(pandas) 요약 정리 (1) 2020.12.19 파이썬 판다스(pandas) 데이터 처리 속도 비교 (2) 2020.12.19 파이썬 Naming Rule (0) 2020.12.19 파이썬 시작하기 (설치 및 기타) (2) 2020.12.12