python

[python]리스트 컴프리헨션(List Comprehension)

다있는닉네임 2023. 3. 8. 09:12

기존 리스트를 간결하게 사용하는 것 

반복문을 한 줄에 사용할 수 있고, 조건문도 같이 사용 가능

일반적인 사용 방법

[변수 for 변수 in 반복 가능한 객체]

res = [i for i in range(10)]

# 리스트 컴프리헨션을 사용하지 않고 일반 for문을 사용할 경우
res = []
for i in range(10):
	res.append(i)
    
--> [0,1,2,3,4,5,6,7,8,9,10]
--> [0,1,2,3,4,5,6,7,8,9,10]

조건문에서의 사용 방법

[변수 for 변수 in 반복 가능한 객체 if 조건]

[변수if 조건 else 조건 만족하지 않을 때 값 for 변수 in 반복 가능한 객체]

 

조건문에서 if문만 사용할 경우 오른쪽에 써주지만, if else사용할 경우 왼쪽에 사용을 해준다.

# 1. if문
# 0~9까지 짝수만 필터링한 리스트
res = [i for i range(10) if i % 2 == 0]
-> [0,2,4,6,8]
# 2. else문 함께 사용
# 조건을 만족하지 않을 때
res = [i if i % 2 == 0 else 10 for i in range(10)]
-> [0,10,2,10,4,10,6,10,8,10]

다중 for문에서 사용 방법

res = [i*j for i in range(2,10) for j in range(1,10)]
res
>> [2,4,6,8,10.....81]

다중 for문 + 조건문 사용 방법

res = [i*j for i in range(2,10) for j in range(1,10) if i % 2==0]
res
>> [2,4,6,8,...72]

 

하지만, 리스트 컴프리헨션은 단순한 경우에만 사용하는 것이 좋음

코드 가독성을 위해서는 복잡한 경우, 리스트 컴프리헨션을 사용하는 것보다 여러 줄로 사용하는 것이 더 나을 수 있음

 

위에서 다중 for문, 다중for문 + 조건문 부분을 일반적인 구문으로 나타냈을 경우

# 이중 for문
lst = []
for i in range(1,10):
    for j in range(2,10):
        lst.append(i*j)
        
        
# 이중 for문 + 조건문
lst = []
for i in range(1,10):
    for j in range(2,10):
        if i % 2 == 0:
            lst.append(i*j)

개인적으로는 다중 for문의 경우 리스트컴프리헨션보다 일반적으로 이중 for문을 쓰는게 가독성이 더 좋은 것 같다.

특히 조건까지 붙어있다면 더더욱