Search
Duplicate

파이썬을 파이썬스럽게-1 (Comprehension)

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
Python
Scrap
태그
9 more properties
(오류 수정은 환영합니다!)

서론

파이썬은 확실히 c언어보다 느린 언어이다. 때문에 '백준'같은 곳에서 알고리즘 문제를 풀다 보면 c언어와 같은 코드인데도 시간 초과가 발생하는 경우가 많다. 이는 당연한 결과이다. 파이썬은 절대 c언어처럼 짜는게 아니다!
사람들은 파이썬스러운 코드를 '파이써닉'하다고 이야기한다. 단순히 있어 보이려는 측면보다는 '파이써닉'한 코드가 정말 파이썬에서 효율이 더 좋다. 함께 '파이써닉'을 알아가보자!
이 글은 어느 정도 파이썬 관련 지식이 있거나 파이썬으로 코테 준비하시는 분들께 도움이 됩니다.

파이썬의 철학

"아름다운 게 추한 것보다 낫다." (Beautiful is better than ugly)
"명시적인 것이 암시적인 것 보다 낫다." (Explicit is better than implicit)
"단순함이 복잡함보다 낫다." (Simple is better than complex)
"복잡함이 난해한 것보다 낫다." (Complex is better than complicated)
"가독성은 중요하다." (Readability counts)
파이썬은 아름답고 깔끔 단순한 코드를 지향한다.
실제로 정말 많이 쓰고 '파이써닉'의 느낌을 이해하기 좋은 것이 컴프리헨션이다.

Comprehension-1

#파이썬스럽지 못한 코드의 예 arr = [] for i in range(10): arr.append(i) #파이썬스러운 코드의 예 arr = list(range(10)) arr = [i for i in range(10)]
Python
복사
한 줄로 엄청난 가독성을 뽑아내 버린다. 속도도 파이써닉 코드가 더 빠르다.
오죽하면 파이썬 분야에서는 문제를 풀 때 한줄코딩이라는 게 있을 정도이다.

Comprehension-2

arr = [1, 2, 3, 4, 5, 6] #파이썬스럽지 못한 코드의 예 result = [] for i in range((len(arr)): if arr[i] % 2 == 1: result.append(arr[i]) #파이썬스러운 코드의 예 (한줄로 끝) result = [i for i in arr if num % 2]
Python
복사
그리고 실제 동작 속도도 파이썬에서는 아래 코드가 더 빠르다.
10000000까지의 숫자로 위 코드를 실행했을 때 실행시간.

Comprehension-3

파이썬에는 리스트 말고도 집합, 딕셔너리의 개념이 있다. 이들도 컴프리헨션을 사용할 수 있다.
# 집합 set1 = {i for i in range(10)} set1 = set(range(10)) # {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} # 딕셔너리 dict1 = {i : i*10 for i in range(5)} # {0: 0, 1: 10, 2: 20, 3: 30, 4: 40, 5: 50}
Python
복사

정리

comprehension은 위 내용 말고도 얼마든지 더 응용할 수 있다.
하지만 개발은 혼자 하는 것이 아니기 때문에 단순히 '줄(line) 수'를 줄이겠다고 복잡하게 가버리면 그것은 가독성도 떨어지고 협업에 비효율적이다. 그래서 이 정도만 소개한 것이다.
한줄코딩에 관심 있거나 comprehension에 관심이 있으면 더 찾아보는 것을 추천한다!

한발 더 나아가기

컴프리헨션파이썬 함수들을 함께 사용하면 진짜 깔쌈한 코드가 나온다. (그 이야기는 추후 연재하도록 하겠습니다!)
깔쌈하다 = '멋지다'의 경상도 사투리입니다.^^