Python에서 반복문을 사용할 때 가장 많이 사용되는 함수 중 하나가 바로 range()
입니다. 이 함수는 숫자 시퀀스를 생성하는 데 사용되며, Python의 반복문과 함께 강력한 도구로 활용됩니다. 특히 for
루프와 함께 사용될 때 그 진가를 발휘하며, 데이터 처리나 알고리즘 구현에 있어 필수적인 요소입니다. range()
함수는 단순히 연속된 숫자를 생성하는 것뿐만 아니라, 시작값, 종료값, 그리고 증가폭을 지정할 수 있어 다양한 시나리오에서 유연하게 활용할 수 있습니다. 또한 메모리 효율성이 뛰어나 대용량 데이터를 다룰 때도 최적화된 성능을 보여줍니다. 이번 글에서는 range()
함수의 다양한 사용법과 실전 예제를 통해 이를 깊이 있게 이해하고, 효과적으로 활용하는 방법을 알아보겠습니다.
1. range()
함수란?
range()
함수는 숫자 범위를 생성하는 내장 함수입니다. 이 함수는 특정 규칙에 따라 생성된 숫자의 시퀀스를 반환하며, 반복문(for
, while
)에서 주로 사용됩니다.
기본 구문
range(start, stop, step)
start
: 시작 숫자 (포함). 기본값은 0입니다.stop
: 끝 숫자 (포함되지 않음).step
: 숫자 간의 간격. 기본값은 1입니다.
2. 단순한 사용법
range(stop)
는 0
부터 stop
바로 앞까지의 숫자를 생성합니다.
예제 1: 기본 사용법
for i in range(5):
print(i)
출력:
0
1
2
3
4
3. start
와 stop
지정하기
start
와 stop
을 지정하면 start
부터 stop
바로 앞까지 1씩 증가하면서 숫자를 생성합니다.
예제 2: 시작 숫자 지정
for i in range(3, 8):
print(i)
출력:
3
4
5
6
7
4. step
사용하기
step
을 사용하여 숫자 간격을 지정할 수 있습니다.
예제 3: 간격 지정
for i in range(2, 10, 2):
print(i)
출력:
2
4
6
8
step
은 음수도 가능합니다.
예제 4: 역순으로 생성
for i in range(10, 0, -2):
print(i)
출력:
10
8
6
4
2
5. range
와 리스트 변환
range()
는 숫자 시퀀스를 반환하기 때문에 리스트로 변환할 수 있습니다.
예제 5: 리스트 변환
nums = list(range(5))
print(nums)
출력:
[0, 1, 2, 3, 4]
6. range
와 조건문 활용
range()
는 반복문과 조건문을 함께 사용하여 복잡한 작업을 처리할 때 유용합니다.
예제 6: 짝수 출력
for i in range(10):
if i % 2 == 0:
print(i)
출력:
0
2
4
6
8
7. range
와 중첩 반복문
range()
는 중첩 반복문에서도 강력하게 활용됩니다.
예제 7: 구구단 출력
for i in range(1, 10):
for j in range(1, 10):
print(f"{i} x {j} = {i*j}")
print()
출력:
1 x 1 = 1
1 x 2 = 2
...
9 x 9 = 81
8. range()
의 메모리 효율성
range()
는 숫자를 한 번에 모두 생성하지 않고, 필요할 때마다 생성하는 이터레이터입니다. 이로 인해 메모리 효율성이 높습니다.
예제 8: 메모리 비교
import sys
nums_list = list(range(1000))
nums_range = range(1000)
print(f"리스트 메모리 사용량: {sys.getsizeof(nums_list)} 바이트")
print(f"range 객체 메모리 사용량: {sys.getsizeof(nums_range)} 바이트")
출력:
9. range
와 enumerate
활용
enumerate()
와 함께 사용하면 인덱스와 값을 동시에 처리할 수 있습니다.
예제 9: 인덱스와 값 출력
words = ["Python", "is", "fun"]
for idx, word in enumerate(words):
print(f"Index {idx}: {word}")
출력:
Index 0: Python
Index 1: is
Index 2: fun
10. range()
와 역순 정렬
range()
를 사용해 역순으로 숫자를 생성할 수 있습니다.
예제 10: 카운트다운
for i in range(10, 0, -1):
print(i)
출력:
10
9
8
7
...
1
11. range()
의 유효성 검사
range()
에 잘못된 값을 전달하면 ValueError
가 발생할 수 있습니다.
예제 11: 유효하지 않은 입력
try:
r = range(1, 10, 0) # step 값이 0일 때
except ValueError as e:
print(e)
출력:
12. range()
와 함수 결합
range()
는 함수 내에서 동적으로 범위를 생성하는 데 유용합니다.
예제 12: 동적 범위 생성
def generate_numbers(start, stop, step):
return list(range(start, stop, step))
print(generate_numbers(1, 10, 3))
출력:
[1, 4, 7]
13. 실전 활용 사례
예제 13: 숫자 합계 계산
total = sum(range(1, 101))
print(f"1부터 100까지의 합: {total}")
출력:
1부터 100까지의 합: 5050
예제 14: 행렬 초기화
# 3x4 행렬을 생성하는 예제
rows, cols = 3, 4 # 행은 3개, 열은 4개로 설정
# 2차원 리스트 컴프리헨션을 사용하여 행렬 초기화
# 바깥쪽 range(rows)는 3개의 행을 생성
# 안쪽 range(cols)는 각 행마다 4개의 열을 생성
# [0 for _ in range(cols)]는 각 행에 0으로 채워진 4개의 요소를 생성
matrix = [[0 for _ in range(cols)] for _ in range(rows)]
# 생성된 3x4 행렬 출력
print(matrix) # [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
출력:
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
14. 결론
Python의 range()
함수는 간단해 보이지만 매우 강력한 도구입니다. 이 함수는 반복 작업, 메모리 효율성, 조건문과 결합, 중첩 반복문 등 다양한 상황에서 활용할 수 있습니다. 이 글에서 소개된 예제를 통해 range()
의 다양한 가능성을 직접 확인해 보세요!