반응형

안녕하세요, 왕초보 코린이를 위한 코딩유치원에 오신 것을 환영합니다.

코딩유치원에서는 파이썬 기초부터 사무자동화, 웹크롤링, 데이터 분석 등의 다양한 패키지까지 초보자도 알기 쉽도록 내용을 정리해 놓았습니다.

업무는 물론 투자에도 도움이 될만한 전자공시시스템(DART) 텔레그램(Telegram) 관련 패키지도 배울 수 있으니 많은 관심 부탁드립니다.

 

 

예전에 파이썬의 장점인 간략한 코딩을 더욱 극대화하는 리스트 컴프리헨션에 대해서 알아보았는데요.

 

2021.11.21 - [파이썬 기초/중급 문법] - [파이썬 중급 문법] 리스트 컴프리헨션 간단 정리

 

오늘은 for 반복문 안에서 리스트 컴프리헨션을 사용할 때 주의할 점에 대해서 말씀드리려 합니다.


 

1. 리스트 컴프리헨션을 사용하는 이유

 

저는 리스트 컴프리헨션 문법을 웹크롤링을 하면서 자주 사용해 왔습니다. 어떤 값을 하나씩 리스트에 추가해줄 때 아주아주 유용하기 때문입니다.

 

<리스트 컴프리헨션을 사용하지 않은 코드>

new_contents=[]

for content in contents:
    if content not in old_contents:
        new_contents.append(content)

 

<리스트 컴프리헨션을 사용한 코드>

new_contents = [content for content in list_contents if content not in old_contents]

 

4줄의 코드가 이렇게 간단해 지니깐 안 쓸 이유가 없겠죠?

 

2. for문 안에서 리스트 컴프리헨션을 사용하지 않은 이유

 

하지만 최근 프로젝트에서 아래와 같이 리스트 컴프리헨션 문법을 사용하지 않았답니다.

 

그 이유는 for문을 돌 때 마다 리스트가 초기화 되어 버리기 때문이었습니다.

 

# 제품명을 담을 빈 리스트 선언
product_name = []

# for문을 이용해서 원하는 페이지에 접근, 정보 추출 후 리스트에 담기
for page_num in range(3):
    url = f'https://smartstore.naver.com/compuzone/category/ALL?st=RECENT&free=false&dt=IMAGE&page={page_num+1}&size=40'
    
    response = requests.get(url)
    soup = bs(response.text , 'html.parser')

    # css selector로 페이지 내의 원하는 정보 가져오기
    html_product = soup.select('strong.QNNliuiAk3')

    # 텍스트만 추출
    for i in html_product:
        product_name.append(i.get_text())

 

무슨 말인지 아직 감이 안오신다면 for문 밖에 product_name 리스트가 밖에서 선언된 것에 주목해보세요.

 

저의 목적은 for문을 돌면서 1, 2, 3페이지에 접속하고, 각 페이지에서 필요한 자료를 리스트에 계속 추가하는 것이었습니다.

 

하지만 아래와 같이 리스트 컴프리헨션 문법을 사용해버리면 product_name이라는 이름의 리스트를 for문 안에서 매번 새로 선언되어서 그 전에 쌓여있던 요소들이 모두 삭제되어 버립니다.

 

# for문을 이용해서 원하는 페이지에 접근, 정보 추출 후 리스트에 담기
for page_num in range(3):
    url = f'https://smartstore.naver.com/compuzone/category/ALL?st=RECENT&free=false&dt=IMAGE&page={page_num+1}&size=40'
    
    response = requests.get(url)
    soup = bs(response.text , 'html.parser')

    # css selector로 페이지 내의 원하는 정보 가져오기
    html_product = soup.select('strong.QNNliuiAk3')
	
    # 리스트 컴프리헨션 사용
    product_name = [i.get_text() for i in html_product]

 


글을 마치며,

 

이번 글은 누군가가에게는 당연한 이야기를 뭐 이렇게 길게 써놨는가 싶을 수 있겠지만, 코딩유치원의 취지에 잘 맞는 글이라고 생각이 듭니다.

 

아직 모르는 것이 많은 초보에게는 작은 돌뿌리도 큰 바위처럼 느껴지기 때문이죠.

 

코딩유치원생 여러분들은 코딩을 하시다가 모르는 부분이 생기시면 주저하지 마시고, 댓글 달아주세요.

 

제가 친절히 도와드릴테니까요~

반응형

+ Recent posts