리스트 컴프리핸션 : 리스트 안에 표현식 과 for 문 if 문을 한줄에 넣어서 새로운 리스트를 만드는것
리스트 뿐만 아니라 튜플 딕셔너리 셋 에서도 가능하다.
리스트 컴프리 핸션을 안 쓴 경우이다.
list = [] # 리스트를 먼저 만들어주고
for i in range(10): # 포문을 10번 돌면서
list.append(i) # 리스트에 추가해준다
위 코드를 리스트 컴프리핸션을 사용하면 아래와 같이 쓸 수 있다.
[i for i in range(10)]
여기서 더 응용해서 조건문 까지 사용할 수 있는데 아래 코드는 리스트 컴프리핸션을 안쓴 조건문을 사용한 식이다.
list = []
for i in range(10):
if(i%2 ==0):
list.append(i)
print(list)
위 식을 바꿔 주면 아래와 같이 바꿀 수 있다.
[i for i in range(10) if i % 2 ==0]
else 와 같이 써준다면 밑처럼 써줄수 있는데. 왜 if 가 왼쪽에 있고 어려워 할 수 있는데.
삼항 연산자까지 사용해준 식이다
(True일때 i 출력 ) 조건문 else (False 일때 'no' 출력) 이라고 보면 된다
[i if i % 2 ==0 else 'no' for i in range(10) ]
for 문을 두개를 사용하려면 맨 앞에 변수 추가해주고 for 한번 더 써주면 된다
list = []
for i in range(10):
for j in range(5):
list.append((i,j))
==
[(i,j) for i in range(10) for j in range(5)]
조금 더 심화를 해보자.
심화 1.
https://school.programmers.co.kr/learn/courses/30/lessons/12910
이 문제를 한번 리스트 컴프리핸션으로 한줄로 풀이를 해보자. 파이썬 특징에대해 잘 알아야한다.
정답코드는 https://windy7271.tistory.com/195
심화 2.
def solution(a, b):
res = []
for a, b in zip(a, b):
print(a*b)
res.append(a*b)
return(sum(res))
print(solution([1,2,3,4],[-3,-1,0,2]))
===
def solution(a, b):
return sum([a * b for a,b in zip(a,b)])
# 뽑아보면 아래와 같이 나온다.
for a, b in zip(a,b):
print(a,b)
를 뽑아보면 아래와 같다
1 -3
2 -1
3 0
4 2
zip 함수란 두개의 리스트에서 차례대로 뽑을 수 있다고 생각하면 된다.
집합 컴프리핸션은 위와 마찬가지이고
딕셔너리는 키와 밸류가 들어가기 때문에
{i : 0 for i in range(5)}
# 출력 해주면 {0: 0, 1: 0, 2: 0, 3: 0, 4: 0}
# 밸류를 0 으로 해주고 돌리는거다 0을 i 로 바꿔주면 0:0, 1:1 이런식으로 된다
집합 컴프리핸션 써야 하는 문제.
https://school.programmers.co.kr/learn/courses/30/lessons/92334
댓글