본문 바로가기
자료구조및알고리즘

(Python)리스트 컴프리핸션(List Comprehension)

by windy7271 2022. 9. 18.
728x90
반응형

리스트 컴프리핸션 :  리스트 안에 표현식 과 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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

이 문제를 한번 리스트 컴프리핸션으로 한줄로 풀이를 해보자. 파이썬 특징에대해 잘 알아야한다.

정답코드는 https://windy7271.tistory.com/195

 

(Python/LV1)나누어 떨어지는 숫자 배열

문제출처: https://school.programmers.co.kr/learn/courses/30/lessons/12910 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁..

windy7271.tistory.com

 

심화 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

반응형

댓글