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의 요소가 순서대로 들어갈거임)

     

    댓글