이번 포스팅에서는 파이썬 에서 쓰이는 반복문의 기본 개념과 종류 , 예제를 살펴보고
실무 프로젝트에서 어떻게 사용하는지에 대해 알아보겠습니다.
그 외에 파이썬의 연사자 와 함수 에 대해 궁금하시면 아래 포스팅을 같이 참고해주세요
✅ 연산자 문법 정리
[ 파이썬 ] 비교 연산자 문법 정리 ( ==, !=, >, <, >=, <= ) 및 예제
[파이썬] 산술 연산자 문법 정리 ( + , - , * , / , % , **, // ) 및 예제
[ 파이썬 ] 논리 연산자 문법 정리 ( AND,OR,NOT ) 및 예제
[ 파이썬 ] 할당 연산자 문법 정리 ( =,+=,-=,/=,//=,%=,*=,**= ) 및 예제
✅ 함수 문법 정리
[ 파이썬 ] len() 함수 사용법 및 실제 프로젝트 예제
[ 파이썬 ] join() 함수 사용법 및 실제 프로젝트 예제
✅ 개념 정리
# 1. for 반복문
for 반복문은 시퀀스(리스트, 튜플, 문자열 등)나 다른 반복 가능한 객체의 요소들을 순회할 때 사용됩니다. 기본 문법부터 살펴보겠습니다.
for문 기본문법
for 변수 in 시퀀스:
실행할 코드
1부터 5까지의 숫자를 출력하는 간단한 for 문은 다음과 같이 작성할 수 있습니다.
for 문 예시
for i in range(1, 6):
print(i)
- 1부터 5까지의 숫자를 순차적으로 출력합니다.
- range() 함수는 시작 값부터 끝 값 직전까지의 숫자 시퀀스를 생성합니다.
# 2. while 반복문
while 반복문은 주어진 조건이 참인 동안 코드 블록을 반복적으로 실행합니다. 기본 문법을 살펴보겠습니다.
while 문 기본문법
while 조건:
실행할 코드
for문과 마찬가지로 1부터 5까지의 숫자를 출력하는 while 문을 작성해보겠습니다.
while 문 예시
i = 1
while i <= 5:
print(i)
i += 1
- i가 5 이하인 동안 i의 값을 출력하고, 매 반복마다 i의 값을 1씩 증가시킵니다.
# 3.반복문의 제어와 활용
반복문을 더욱 효과적으로 사용하기 위해서는 반복문의 흐름을 제어하는 방법과 다양한 활용 기법을 알아야 합니다. 여기서는 반복문의 제어 키워드와 중첩 반복문에 대해 살펴보겠습니다.
break와 continue 문
break와 continue는 반복문의 흐름을 제어하는 데 사용되는 키워드입니다.
- break: 반복문을 즉시 종료하고 반복문 다음 코드로 이동합니다.
- continue: 현재 반복을 중단하고 다음 반복으로 넘어갑니다.
break 와 continue 예시
# break 예시
for i in range(1, 10):
if i == 5:
break
print(i)
# continue 예시
for i in range(1, 10):
if i % 2 == 0:
continue
print(i)
- 첫 번째 예시 : i가 5가 되면 반복문이 종료됩니다.
- 두 번째 예시 : 짝수일 경우 출력을 건너뛰고 다음 반복으로 넘어갑니다.
중첩 반복문
중첩 반복문은 반복문 안에 또 다른 반복문을 사용하는 구조입니다. 이를 통해 복잡한 패턴이나 다차원 데이터를 처리할 수 있습니다. 예를 들어, 구구단을 출력하는 중첩 반복문을 작성해 보겠습니다.
구구단 예시
for i in range(2, 10):
for j in range(1, 10):
print(f"{i} x {j} = {i*j}")
print() # 단 사이에 빈 줄 출력
- 2단부터 9단까지의 구구단을 출력합니다.
- 외부 반복문은 단을 결정하고, 내부 반복문은 각 단의 곱셈을 수행 합니다
# 4. 반복문 활용, 실무 프로젝트에서 어떻게 쓰일까?
실제 프로젝트에서 반복문은 다양한 방식으로 활용됩니다. 이번 포스팅에선 데이터 처리, 파일 입출력, 웹 스크래핑 등
실무에서 자주 사용되는 반복문 활용 예제를 살펴보겠습니다
반복문 실무 예시
🚩 데이터 처리 예제 🚩
대량의 데이터를 처리할 때 반복문은 필수적입니다. 다음은 리스트에서 특정 조건을 만족하는 요소만 추출하는 예제 입니다.
data = [10, 25, 30, 45, 50, 65, 70, 85, 90]
filtered_data = []
for item in data:
if item >= 50:
filtered_data.append(item)
print(f"50 이상의 숫자: {filtered_data}")
- data 리스트에서 50 이상인 숫자만 추출하여 새로운 리스트 filtered_data에 저장합니다.
🚩파일 입출력 예 🚩
파일을 읽고 쓰는 작업에서도 반복문이 자주 사용됩니다. 다음은 텍스트 파일을 읽고 각 줄의 단어 수를 계산하는 예제입니다
with open('example.txt', 'r') as file:
for line in file:
words = line.split()
print(f"줄: {line.strip()}, 단어 수: {len(words)}")
- example.txt 파일의 각 줄을 읽어 단어 수를 계산하고 출력합니다. with 문을 사용하여 파일을 안전하게 열고 닫습니다.
🚩웹 크롤링 예제 🚩
웹 스크래핑은 데이터 수집에 자주 사용되는 기법입니다. 다음은 requests와 BeautifulSoup 라이브러리를 사용하여 웹 페이지의 모든 링크를 추출하는 예제입니다
import requests
from bs4 import BeautifulSoup
url = 'https://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
for link in soup.find_all('a'):
href = link.get('href')
if href:
print(href)
- 지정된 URL의 웹 페이지에서 모든 <a> 태그를 찾아 href 속성 값을 출력합니다.
# 5. 반복문 최적화 및 성능 향상 팁
반복문을 효율적으로 사용하는 것은 프로그램의 성능을 크게 향상시킬 수 있습니다. 반복문을 최적화하고 성능을 개선하는 몇 가지 팁을 알려드리도록 하겠습니다.
리스트 컴프리헨션 ( list comprehension )활용
리스트 컴프리헨션(list comprehension) 은 간결하고 읽기 쉬운 코드를 작성할 수 있게 해주며, 일반적인 for 루프보다 더 빠른 성능을 제공합니다.
# 일반적인 for 루프
squares = []
for i in range(10):
squares.append(i**2)
# 리스트 컴프리헨션
squares = [i**2 for i in range(10)]
위에 코드는 일반적인 for 루프 반복문이고, 밑 코드는 리스트 컴프리헨션을 사용한 방법입니다.
리스트 컴프리헨션은 코드를 더 간결하게 만들며, 대부분의 경우 더 빠른 실행 속도를 보여줍니다
제너레이터 표현식 사용
대용량 데이터를 처리할 때는 제너레이터 표현식을 사용하면 메모리 사용을 최적화할 수 있습니다. 제너레이터는 모든 결과를 한 번에 메모리에 저장하지 않고, 필요할 때마다 값을 생성합니다.
# 리스트 컴프리헨션 (모든 결과를 메모리에 저장)
sum([i**2 for i in range(1000000)])
# 제너레이터 표현식 (필요할 때마다 값을 생성)
sum(i**2 for i in range(1000000))
혹시 위 두 코드의 차이점을 발견하셨나요?
제너레이터 표현식은 대괄호([]) 대신 괄호(())를 사용합니다. 이 방식은 대용량 데이터를 처리할 때 메모리 사용량을 크게 줄일 수 있습니다.
불필요한 연산 피하기
반복문 내에서 불필요한 연산을 피하는 것도 중요합니다. 예를 들어, 반복문 밖에서 계산할 수 있는 값은 미리 계산해 두는 것이 좋습니다.
# 비효율적인 방법
for i in range(1000000):
result = i * len([1, 2, 3, 4, 5])
# 효율적인 방법
list_length = len([1, 2, 3, 4, 5])
for i in range(1000000):
result = i * list_length
두 번째 방법에서는 리스트의 길이를 반복문 밖에서 한 번만 계산하므로, 반복문 내에서의 불필요한 연산을 줄일 수 있습니다.
# 6. 반복문 고수처럼 쓰는 팁
파이썬에서는 반복문을 더욱 효과적으로 사용할 수 있는 여러 가지 고급 기법이 있습니다. 이러한 기법들을 잘 활용하면 코드의 가독성과 효율성을 크게 향상시킬 수 있습니다. 한번 살펴보도록 하겠습니다!
enumerate() 함수 활용
enumerate() 함수는 반복 가능한 객체의 인덱스와 값을 동시에 얻을 수 있게 해줍니다. 이는 리스트나 튜플의 요소를 처리할 때 특히 유용합니다.
fruits = ['사과', '바나나', '체리']
for index, fruit in enumerate(fruits):
print(f"{index}번째 과일: {fruit}")
- 각 과일의 인덱스와 이름을 함께 출력합니다.
- enumerate()를 사용하면 별도의 카운터 변수를 관리할 필요가 없어 코드가 더 깔끔해집니다.
zip() 함수를 이용한 병렬 처리
zip() 함수는 여러 개의 반복 가능한 객체를 병렬로 순회할 때 사용됩니다. 이는 여러 리스트의 요소를 동시에 처리해야 할 때 매우 유용합니다.
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
for name, age in zip(names, ages):
print(f"{name}의 나이는 {age}세입니다.")
- names와 ages 리스트의 요소를 동시에 순회하면서 각 사람의 이름과 나이를 함께 출력합니다.
map() 함수를 이용한 데이터 변환
map() 함수는 리스트의 모든 요소에 특정 함수를 적용할 때 사용됩니다. 이는 데이터 변환 작업을 간단하게 수행할 수 있게 해줍니다.
numbers = ['1', '2', '3', '4', '5']
int_numbers = list(map(int, numbers))
print(int_numbers) # [1, 2, 3, 4, 5]
- 문자열로 된 숫자 리스트를 정수 리스트로 변환합니다.
- map() 함수는 numbers 리스트의 각 요소에 int() 함수를 적용합니다.
# 7. 마무리
파이썬 반복문의 기본 개념부터 고수들이 쓰는 기법, 팁 까지 살펴보았습니다. 파이썬 문법을 잘 숙지하시면, 실무 프로젝트에서
유용하게 사용할 수있습니다. 다음 포스팅에서도 파이썬의 문법을 실무예제와 함께 알아보도록 하겠습니다.