(오류 수정은 환영합니다!)
서론
•
파이썬은 확실히 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에 관심이 있으면 더 찾아보는 것을 추천한다!
한발 더 나아가기
•
컴프리헨션과 파이썬 함수들을 함께 사용하면 진짜 깔쌈한 코드가 나온다. (그 이야기는 추후 연재하도록 하겠습니다!)
•
깔쌈하다 = '멋지다'의 경상도 사투리입니다.^^