코딩테스트 문제를 풀다보면 list comprehension 문을 자주 사용하는데 조건문과 섞어 쓰다보면 오류가 날 때가 있다.
if문만 쓸 때와 if, else 구문 쓸 때 오는 위치가 달라진다. 또 dict 다룰 때 내가 자주 실수하는 것 정리 !
코드로 알아보자.
첫 번째 : dict 할 때 실수
id_list = ["muzi", "frodo", "apeach", "neo"]
# dict.fromkeys로 dict를 만들 때
d_num = dict.fromkeys(id_list, 0)
d_list = dict.fromkeys(id_list, [])
d_num['muzi'] += 1 # {'muzi': 1, 'frodo': 0, 'apeach': 0, 'neo': 0}
d_list['muzi'].append(1) # {'muzi': [1], 'frodo': [1], 'apeach': [1], 'neo': [1]}
# 그래프 만들 때 [[]] * 10 만들면 안되는 것 처럼 사전도 마찬가지 [[] for _ in range(n)] 사용
# d_list = dict(zip(id_list, [[] for _ in range(n)])
두 번째 : list comprehension. for문과 if문 같이 쓸 때
#### if문만 쓰는 경우
[k if v >= 2 for k,v in rtd_dict.items()] # SyntaxError
[k for k,v in rtd_dict.items() if v >=2 ] # 구문 마지막에 써야 정상 #
#### if, else 쓰는 경우
[k if v >= 2 else 1 for k,v in rtd_dict.items()] # 앞에 써야 정상
[k for k,v in rtd_dict.items() if v >= 2 else 1] # SyntaxError
#### 이중 조건 주는 경우
## and 조건 시 ans 없이
arr = [n for n in range(1, 31) if n % 2 == 0 if n % 3 == 0] # [6, 12, 18, 24, 30]
arr = [n for n in range(1, 31) if n % 2 == 0 and if n % 3 == 0] # 오류
## or 조건 시 or 써야함
arr = [n for n in range(1, 16) if n % 2 == 0 or n % 3 == 0] # [2, 3, 4, 6, 8, 9, 10, 12, 14, 15]