# 한 줄 for문을 사용하지 않을 때
my_list = []
for x in range(5):
my_list.append(x)
print(my_list) # [0,1,2,3,4]
# 한 줄 for문을 사용했을 때
my_list = [x for x in range(5)]
print(my_list) # [0,1,2,3,4]
리스트에 0부터 4까지 집어넣는 예제입니다.
위의 코드와 아래 코드는 같은 의미입니다.
원래는 3줄을 써야 하는데 한 줄 for문을 사용하면 말 그대로 한 줄이면 충분합니다.
한 줄 for문 응용하기 (수식 추가)
수식을 추가할 수도 있습니다.
my_list = [x+x for x in range(5)]
print(my_list) # [0,2,4,6,8]
my_list = [x*x for x in range(5)]
print(my_list) # [0,1,4,9,16]
my_list = [x**x for x in range(5)]
print(my_list) # [1,1,4,27,256]
한 줄 for문 응용하기 ( if문 )
조건을 추가하는 것도 가능합니다.
my_list = [x for x in range(1, 11) if x % 2 == 0] # 짝수만 추출
print(my_list) # [2,4,6,8,10]
my_list = []
for x in range(1, 11):
if x % 2 == 0:
my_list.append(x)
print(my_list) # [2,4,6,8,10]
import requests
from bs4 import BeautifulSoup
url = "https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%EC%A3%BC%EC%8B%9D%EC%8B%9C%EA%B0%80%EC%B4%9D%EC%95%A1"
result = requests.get(url)
soup = BeautifulSoup(result.text, "lxml")
table = soup.find("table", {"class":"lsttype_tb"})
tr_list = table.find("tbody").find_all("tr")
for tr in tr_list:
name = tr.find("a").get_text() # a 태그의 text 부분을 추출
price = tr.find_all("td")[0].get_text()
with open("stock_quote.txt","a",encoding="utf8") as f:
f.write(f"{name}: {price}\n")
for문을 돌려서 각 tr에 있는 이름과 가격을 추출해서 파일에 담았습니다.
결과를 보면 가격이 천차만별입니다.
마지막으로 여기서 가격이 500,000원 미만인 것들만 담아보겠습니다.
하지만 문제가 있습니다.
가격 정보를 보면 71,500 같이 쉼표가 포함되어있는 문자열입니다.
우선 replace() 함수를 사용해서 쉼표를 ""(빈 문자열)로 바꾸고
int 형 변환을 해야 합니다.
import requests
from bs4 import BeautifulSoup
url = "https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=%EC%A3%BC%EC%8B%9D%EC%8B%9C%EA%B0%80%EC%B4%9D%EC%95%A1"
result = requests.get(url)
soup = BeautifulSoup(result.text, "lxml")
table = soup.find("table", {"class":"lsttype_tb"})
tr_list = table.find("tbody").find_all("tr")
for tr in tr_list:
name = tr.find("a").get_text() # a 태그의 text 부분을 추출
price = tr.find_all("td")[0].get_text()
price = price.replace(",", "")
if int(price) >= 500000: # 만약 가격이 50만원 이상이면 continue
continue
with open("stock_quote.txt","a",encoding="utf8") as f:
f.write(f"{name}: {price}\n")