티스토리 뷰
AI/Python
[python] Pythonic code(split, join, list comprehension, enumerate, zip), 레거시(lambda, map, reduce)
brave_sol 2024. 6. 12. 18:53[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)
반응형
'AI > Python' 카테고리의 다른 글
[프로그래머스 기초] Day 16,17,18,19 문자열, 리스트 (2) | 2024.06.13 |
---|---|
[python] iterable, generator, 함수의 매개변수(keyword, default, asterisk) (0) | 2024.06.13 |
[python] 모듈(collections) (2) | 2024.06.09 |
[Python] 자료구조(스택,큐,튜플,집합,딕셔너리) (2) | 2024.06.08 |
[Python] 문자열, 함수 (0) | 2024.06.06 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 루틴
- 운동
- 경제
- 기초
- Ai
- ChatGPT
- 30분
- 아침
- 뉴스
- C언어
- 아침운동
- 영어회화
- opic
- 오블완
- IH
- 스크랩
- 빅데이터 분석기사
- Python
- 오픽
- 티스토리챌린지
- 습관
- 프로그래머스
- 다이어트
- SQL
- 줄넘기
- 갓생
- 실기
- llm
- 고득점 Kit
- 미라클모닝
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함