Python; 리스트 함축 (List Comprehension)

예제를 통해 리스트 함축을 알아봅시다.

 

앞과 뒤가 같은 문자열의 개수를 세야하는 상황이 주어졌을 때, 리스트 함축을 모르는 상태일 때는 다음처럼 작성할 것임

lst=['aba','xyz','abc','121','789']

cnt=0
for i in lst:
	if(i[0]==i[-1]):
		cnt+=1

print('앞과 뒤가 같은 문자열 개수: ',cnt)

 

만약 리스트 함축을 안다면 다음과 같이 사용할 수 있음

lst1=['aba','xyz','abc','121']
lst2=[w for w in lst1 if(w[0]==w[-1])]

print('앞과 뒤가 같은 문자열 개수: ',len(lst2))

 

위 코드처럼 리스트의 안에 for문과 if문을 작성할 수 있음

위 코드를 설명하겠음

먼저 w라는 변수가 리스트에 추가될 건데, 그 w는 lst1이라는 리스트의 요소임

근데 lst1의 요소가 모두 추가되는건 아니고 조건문에 의해서 문자열의 첫글자와 마지막 글자가 같은 경우만 추가됨

 

리스트에 추가될 변수는 제일 앞에 위치하고 그 변수는 반복문의 변수에 의해 정해짐

그리고 조건문은 일반적으로 반복문의 뒤에 적음

if else를 쓸때는 조건문이 앞으로 옴

 

다른 예시를 보겠음

첫번째 리스트에 1~10의 정수가 저장되어있음. 이때 첫번째 리스트의 요소 중 3~8만 음수로 바꾸고 싶다면 어떻게 해결할까 생각해보셈

 

먼저 리스트 함축을 모르는 상태라면 아래처럼 작성할 것임

lst1 = [i for i in range(1,11)]
lst2=[]

for i in lst1:
    if(3<=i<=8):
        lst2.append(-i)

print(lst1)
print(lst2)

 

다음은 리스트 함축을 사용하여 작성한 것임

lst1 = [i for i in range(1, 11)]
lst2 = [-i if 3 <= i <= 8 else i for i in lst1]

print(lst1)
print(lst2)

 

lst2의 리스트 함축을 사용한 것을 설명하면

3<=i<=8 일때, -i를 리스트에 추가하고 아니라면 i를 추가할거임

근데 그 i는 lst의 요소임( for문에 의해서 lst1의 요소가 순서대로 들어갈거임)

 

댓글