본문 바로가기

코테 공부/python

Python List Comprehension + set, dict comprehension

  1. 기본 구조 : 표현식 + for문
    result = [표현식 for 변수 in 리스트]

  2. 표현식 + for문 + 조건문
    result = [표현식 for 변수 in 리스트 조건문]

  3. 표현식 + 조건문 + for문
    result = [표현식 if 조건문 else 표현 for 변수 in 리스트]

  4. 중첩 for문
    result = [조건문 for 변수1 in 리스트1 for 변수2 in 리스트2 ...]

  5. 중첩 List Comprehension

 

1. 기본 구조 : 표현식 + for문
result = [표현식 for 변수 in 리스트]

 

2. 표현식 + for문 + 조건문
result = [표현식 for 변수 in 리스트 조건문]

조건문이 for문 뒤에 붙는 경우에는 단일 조건문 밖에 못쓴다 (else나 elif 불가)

 if를 여러번 사용하는 것은 가능(두 조건문이 and로 묶인 것과 같은 결과)

 

 

3. 표현식 + 조건문 + for문
result = [표현식 if 조건문 else 표현 for 변수 in 리스트]

 

4. 중첩 for문
result = [조건문 for 변수1 in 리스트1 for 변수2 in 리스트2 ...]

doubleFor = []
for i in range(1, 4) :
    for j in range(1, 3) :
        doubleFor.append(i*j)

print(doubleFor) #[1, 2, 2, 4, 3, 6]

doubleFor = [ i*j for i in range(1, 4) for j in range(1, 3) ]

print(doubleFor) #[1, 2, 2, 4, 3, 6]

 

이중배열 flatten 하는 방법도 마찬가지

doublist = [[1, 2], [3, 4], [5, 6]]
print([y for x in doublist for y in x])
#[1, 2, 3, 4, 5, 6]

for x in doublist 먼저 실행, x 에 doublist 요소(내부 리스트) 하나씩 들어와

다음으로 y for y in x 실행되어 x에 들어있던 요소(내부 리스트의 요소) 하나씩 y로

y로 이루어진 1차원 리스트 생성

 

5. 중첩 List Comprehension

밖에 있는 for문부터

 

result = [ [ 0 for i in range(2) ] for j in range(3) ] 

print(result) # [ [0, 0], [0, 0], [0, 0] ]
 

 

아니 comprehension이 list, dict, set 동일한 방식으로 가능한거 나만 이제 알았나..?!

set = {이 안에 comprehension 표현식}

dict = {key:val 표현식} 출력값 표시 형식이 key:val 형식으로 출력. 표현식은 for key, val in enumerate()/zip() 이런식으로

 

 

출처: https://velog.io/@mttw2820/List-Comprehension-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC