Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- HelloWorld
- Java
- recursion
- tensorflow
- codingthematrix
- yarn
- hive
- NumPy
- 알고리즘
- RNN
- 코딩더매트릭스
- Sort
- C언어
- scrapy
- graph
- python
- 주식분석
- 딥러닝
- 그래프이론
- hadoop2
- 하이브
- GRU
- 텐서플로
- LSTM
- effective python
- 하둡2
- C
- 선형대수
- 파이썬
- collections
Archives
- Today
- Total
EXCELSIOR
BETTER WAY 7 - map과 filter 대신 리스트 컴프리헨션을 사용하자 본문
Python/Effective Python
BETTER WAY 7 - map과 filter 대신 리스트 컴프리헨션을 사용하자
Excelsior-JH 2018. 2. 23. 16:03BETTER WAY 7 - map
과 filter
대신 리스트 컴프리헨션을 사용하자
Item07 - Use List Comprehensions Instead of map
and filter
Python에서는 한 리스트에서 다른 리스트를 만들어내는 간결한 문법이 있다.
바로 리스트 컴프리헨션(list comprehension) 이라고 한다.
1 2 3 4 5 6 7 8 | # List Comprehension을 이용해 루프를 돌면서 # 아래와 같이 계산이 가능하다. a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] squares = [x**2 for x in a] print(squares) '''출력결과 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] ''' | cs |
이처럼 간단한 연산에는 리스트 컴프리헨션이 내장 함수 map
보다 명확하다. map
을 쓰려면 계산에 필요한 lambda
함수를 생성해야 하기 때문에 깔끔해 보이지 않는다.
1 2 3 4 5 6 | squares = map(lambda x:x**2, a) squares = list(squares) print(squares) '''출력결과 [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] ''' | cs |
map
과 달리 List Comprehension을 사용하면 입력 리스트에 있는 아이템(요소)을 간편하게 걸러낼 수 있다.
1 2 3 4 5 6 7 | # 예를 들어 2로 나누어 떨어지는 숫자의 제곱만 계산한다고 하면 # 아래와 같이 작성하면 된다. even_squares = [x**2 for x in a if x % 2 == 0] print(even_squares) '''출력결과 [4, 16, 36, 64, 100] ''' | cs |
내장 함수 filter
를 map
과 연계해서 사용해도 같은 결과를 얻을 수 있지만 훨씬 읽기가 어렵다.
1 2 | alt = map(lambda x: x**2, filter(lambda x: x % 2 == 0, a)) assert even_squares == list(alt) | cs |
딕셔너리(dictionary
)와 집합(set
)에도 리스트 컴프리헨션에 해당하는 문법이 있다.
1 2 3 4 5 6 7 8 9 | chile_ranks = {'ghost': 1, 'habanero': 2, 'cayenne': 3} rank_dict = {rank: name for name, rank in chile_ranks.items()} chile_len_set = {len(name) for name in rank_dict.values()} print('rank_dict =', rank_dict) print('chile_len_set =', chile_len_set) '''출력결과 rank_dict = {1: 'ghost', 2: 'habanero', 3: 'cayenne'} chile_len_set = {8, 5, 7} ''' | cs |
정리
- 리스트 컴프리헨션은 추가적인
lambda
표현식이 필요 없어서 내장 함수인map
이나filter
를 사용하는 것보다 명확하다. - 리스트 컴프리헨션을 사용하면 입력 리스트에서 아이템을 간단히 건너뛸 수 있다.
- 딕셔너리와 세트도 컴프리헨션 표현식을 지원한다.
'Python > Effective Python' 카테고리의 다른 글
BETTER WAY 8 - 리스트 컴프리헨션에서 표현식을 두 개 넘게 쓰지 말자 (0) | 2018.04.19 |
---|---|
BETTER WAY 6 - 한 슬라이스에 start, end, stride를 함께 쓰지 말자 (0) | 2018.01.29 |
BETTER WAY 5 - 시퀀스를 슬라이스하는 방법을 알자 (0) | 2018.01.29 |
BETTER WAY 4 - 복잡한 표현식 대신 헬퍼(Helper) 함수를 작성하자 (0) | 2018.01.29 |
BETTER WAY 03 - bytes, str, unicode의 차이점을 알자 (0) | 2018.01.22 |
Comments