티스토리 뷰

[1] pythonic code란?

- 파이썬 스타일의 코딩 기법

- 파이썬 특유의 문법을 활용하여 효율적으로 코드를 표현함

- 그러나 더 이상 파이썬 특유는 아님, 많은 언어들이 서로의 장점을 채용

- 고급 코드를 작성 할 수록 더 많이 필요해짐

- 왜 사용? 남이쓴거 이해할라고! 많은 개발자들이 python 스타일로 코딩함

- 효율 : 단순 for loop append보다 list가 조금 더 빠르다, 익숙해지면 코드도 짧아진다.

문법 예시
split : 데이터 나누고 list로 반환 -string type의 값을 기준값으로 나눠서 list 형태로 변환

items = "zero one two three"
print(items.split(" ")) # ['zero', 'one', 'two', 'three']

a,b,c,d = items.split(" ") # 언패킹
print(a) # zero
print(b) # one
print(c) # two
print(d) # three
join : 데이터 합치기 items =  ['zero', 'one', 'two', 'three']
print('   '.join(items)) # zero   one   two   three
list comprehension
: 리스트만들기
- 기존 list를 사용하여 간단히 다른 list를 만드는 기법
- 일반적으로 for + append보다 속도가 빠름

result = [i for i in range(10)]
print(result) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

- nested for loop
word1 = "Hello"
word2 = "World"
result = [ i+j for i in word1 for j in word2 ]
# for i in word1 :
        result = [ ]
        for j in word 2 :
             result.append(i+j) 와 같은 의미 

print(result)  # ['HW', 'Ho', 'Hr', 'Hl', 'Hd', 'eW', 'eo', 'er', 'el', 'ed', 'lW', 'lo', 'lr', 'll', 'ld', 'lW', 'lo', 'lr', 'll', 'ld', 'oW', 'oo', 'or', 'ol', 'od'] 

** filter : 조건문을 삽입하는 것
1) if만 있으면 for문 뒤에  result = [i+j for i in word1 for j in word2 if not (i==j)]
print(result) # ['HW', 'Ho', 'Hr', 'Hl', 'Hd', 'eW', 'eo', 'er', 'el', 'ed', 'lW', 'lo', 'lr', 'ld', 'lW', 'lo', 'lr', 'ld', 'oW', 'or', 'ol', 'od']
2) else도 있으면 for문 앞에 result = [i+j  if not (i==j) else i for i in word1 for j in word2]
print(result) # ['HW', 'Ho', 'Hr', 'Hl', 'Hd', 'eW', 'eo', 'er', 'el', 'ed', 'lW', 'lo', 'lr', 'l', 'ld', 'lW', 'lo', 
'lr', 'l', 'ld', 'oW', 'o', 'or', 'ol', 'od']

2차 배열도 생성 가능
** 24개의 알파벳으로 이루어진 문장으로 데이터 분석 시 많이 사용
words = 'The quick brown fox jumps over the lazy dog'.split() 

result =  [ [ i+j for i in word1] for j in word2 ]
# for j in word2:
      line = [ ]
      for i in word1:
           line.append(i+j) 로 순서 바뀜
print(result) # [['HW', 'eW', 'lW', 'lW', 'oW'], ['Ho', 'eo', 'lo', 'lo', 'oo'], ['Hr', 'er', 'lr', 'lr', 'or'], ['Hl', 'el', 'll', 'll', 'ol'], ['Hd', 'ed', 'ld', 'ld', 'od']]]
enumerate
: 리스트의 인데스와 값을 같이 추출
*열거하다 라는 뜻
list의 element를 추출할 때 번호를 붙여서 추출
for i,v in enumerate(['A', 'B', 'C']):
    print(i,v)
# 0 A
   1 B
   2 C

*** dict 타입으로 많이 사용
my_str = "ABCD"
result = { v : i for i, v in enumerate(my_str)}
print(result) # {'A': 0, 'B': 1, 'C': 2, 'D': 3}
zip
: 두개의 리스트를 병렬적으로 추출
A = [1,2,3]
B = [4,5,6]
for a,b in zip(A,B):
    print(a,b)
# 1 4
   2 5
   3 6

* 튜플 타입으로 묶을 수도 있음
result = [ c for c in zip(A,B) ]
print(result) # [(1, 4), (2, 5), (3, 6)]

* enumerate와 zip을 같이 쓰면 인데스와 함께 저장 가능
result = list(enumerate(zip(A,B)))
print(result) # [(0, (1, 4)), (1, (2, 5)), (2, (3, 6))]

 

[2] Legacy

- 컴퓨터 분야에서 과거로부터 물려 내려온 기술, 방법, 컴퓨터 시스템 및 응용 프로그램을 의미하며, 새로이 대체 가능한 기존의 기술을 말한다.

- 직관성이 떨어지고, 읽기 어렵거나 테스트가 어려워 python3부터 권항하지 않는 방법(하지만 많이 씀)

lambda
: 이름 없는 함수
(1) 변수명= lambda 매개변수: return값
(2) ( lambda 매개변수: return값) (매개변수)
- 함수 이름 없이, 함수처럼 쓸 수 있는 익명함수
- 수학의 람다 대수에서 유래함
f = lambda x,y: x+y
print(f(1,4)) # 5
print((lambda x,y: x+y)(2,3)) # 5

**lambda의 문제점 (PEP8에서는 def 사용권장)
- 어려운 문법. 테스트의 어려움, 문서화 docstring지원 미비, 코드해석 어려움, 이름존재하지 않는 함수의 출현
- 내가 혼자 한번 쓰고 버리는 함수라면 괜찮지만,남들이 쓸수 있거나 공개해야 하는 코드에는 쓰면 안좋음
map
: seuence형 데이터에 함수를 맵핑
값에 각각 함수 적용 후 결과 값을 받는 거
- 두 개 이상의 list에도 적용 가능함
- python3는 iteration을 생성 -> list를 붙여줘야 list 사용 가능
- 실행시점의 값을 생성하여 메모리에  효율적이다
A = [1,2,3,4,5]
f1 = lambda x: x**2
print(list(map(f1,A))) # [1, 4, 9, 16, 25]
f2 = lambda x,y: x+y
print(list(map(f2,A,A))) # [2, 4, 6, 8, 10]

- 조건문 사용가능(filter)
print(list(map(lambda x: x**2 if x % 2 ==0 else x, A))) # [1, 4, 3, 16, 5]
reduce
*대용량의 데이터를 다룰 때는 아직 많이 사용
from functools import reduce 필요 
- map과 달리 list에 똑같은 함수를 적용해서 통합
from functools import reduce 
print(reduce(lambda x,y : x+y, [1,2,3,4,5])) # 15
# x = x+y 가됨
# 1+2 = 3 → 3+3 =6 → 6+4 = 10 → 10+5 = 15 

 

 

※ 출처 : 네이버 부스트코스 - 인공지능 기초 다지기(https://www.boostcourse.org/ai100)

 

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함