ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 코드 스타일
    python 2020. 12. 19. 19:04

     

    파이썬스러운 코딩방식을 알아보자, 파이썬 특유의 코드를 소개한다.

    (참고: 데이터 과학을 위한 파이썬 프로그래밍, 최성철 지음)

    파이썬이라는 이름은 귀도가 좋아하는 코미디 〈Monty Python's Flying Circus〉에서 따온 것

     

     

    (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] 와 동일하다.

     

    마침.

    댓글

Designed by Tistory.