파이썬 range() 함수 마스터하기: 기초부터 고급 활용까지
파이썬 range() 함수 마스터하기: 기초부터 고급 활용까지
파이썬 range란 무엇인가?
파이썬의 range()는 시작, 정지, 선택적 단계(step)를 기반으로 정수 시퀀스를 생성하는 내장 제너레이터입니다. 시작 값이 생략되면 0이 기본값이며, 정지 값(미포함)에 도달할 때까지 1씩 증가합니다. 예를 들어 range(5)는 0, 1, 2, 3, 4를 생성합니다. for 루프로 반복할 때 필수적입니다.
이 튜토리얼에서 배울 내용:
range()의 정의와 문법
- 역사:
range() vs xrange()
- 시작, 정지, 단계로
range() 사용하기
- 증가 및 감소 범위
- 부동소수점 제한 처리와 대안
- 리스트, 배열, NumPy의
arange()와 함께 사용
- 고급 패턴: 범위 병합, 짝수 추출, 알파벳 시퀀스 생성
문법
range(start, stop, step)
매개변수
- start (선택): 시퀀스의 첫 번째 정수. 생략 시 0 기본값.
- stop (필수): 상한값 (미포함). 이 값에 도달하기 전에 시퀀스 정지.
- step (선택): 연속 값 사이의 간격. 기본값 1.
반환값
range 객체를 반환하며, 정수의 불변 시퀀스처럼 동작합니다. 리스트로 변환하면 전체 시퀀스가 표시됩니다.
파이썬 range() 함수와 역사
파이썬 3에 도입된 range()는 파이썬 2에서 쓰이던 xrange()를 대체했습니다. 주요 차이점:
| range() | xrange() |
| 숫자의 불변 시퀀스 반환 | 제너레이터 객체 반환 |
| 시퀀스 길이에 비례하는 메모리 소비 | 최소 메모리 사용; 값 지연 생성 |
| 중소 규모 범위에 적합 | 대규모 범위나 무한 시퀀스에 선호 |
| 대규모 범위에서 메모리 할당으로 느림 | 대규모 범위 반복 시 빠름 |
range() 사용하기
0부터 9까지 숫자 출력 기본 예제:
for i in range(10):
print(i, end=" ")
출력: 0 1 2 3 4 5 6 7 8 9
range()에서 start와 stop 사용
시작 값 지정으로 시퀀스 이동:
for i in range(3, 10):
print(i, end=" ")
출력: 3 4 5 6 7 8 9
start, stop, step 모두 사용
단계 추가로 숫자 간격 제어:
for i in range(3, 10, 2):
print(i, end=" ")
출력: 3 5 7 9
양수 단계로 값 증가
기본 단계는 1이지만 양의 정수 지정 가능:
for i in range(1, 30, 5):
print(i, end=" ")
출력: 1 6 11 16 21 26
역방향 range: 음수 단계로 감소
음수 단계로 내림차순 시퀀스 생성:
for i in range(15, 5, -1):
print(i, end=" ")
출력: 15 14 13 12 11 10 9 8 7 6
파이썬 range()에서 부동소수점 사용
내장 range()는 정수만 허용합니다. 실수 전달 시 TypeError 발생:
for i in range(10.5):
print(i, end=" ")
# TypeError: 'float' object cannot be interpreted as an integer
파이썬 range()와 for 루프
len()과 함께 리스트 인덱스 반복에 자주 사용:
arr_list = ['Mysql', 'Mongodb', 'PostgreSQL', 'Firebase']
for i in range(len(arr_list)):
print(arr_list[i], end=" ")
출력: Mysql Mongodb PostgreSQL Firebase
range()를 리스트로 사용
print(list(range(10)))
출력: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
파이썬 range()에서 문자 사용
range()는 정수만 다루지만, 문자를 유니코드 코드 포인트로 변환해 알파벳 시퀀스 생성 가능:
def get_alphabets(startletter, stopletter, step):
for c in range(ord(startletter.lower()), ord(stopletter.lower()), step):
yield chr(c)
print(list(get_alphabets("a", "h", 1)))
출력: ['a', 'b', 'c', 'd', 'e', 'f', 'g']
range 요소 접근 방법
반복, 인덱싱, 리스트 변환으로 값 검색 가능:
반복
for i in range(6):
print(i)
인덱싱
startvalue = range(5)[0]
print("첫 번째 요소:", startvalue)
secondvalue = range(5)[1]
print("두 번째 요소:", secondvalue)
lastvalue = range(5)[-1]
print("마지막 요소:", lastvalue)
list() 사용
print(list(range(10)))
예제: range()로 짝수 구하기
18까지 짝수 생성:
for i in range(2, 20, 2):
print(i, end=" ")
출력: 2 4 6 8 10 12 14 16 18
두 range() 출력 병합
itertools.chain으로 두 range 객체 결합:
from itertools import chain
print("두 range 병합")
frange = chain(range(10), range(10, 20, 1))
for i in frange:
print(i, end=" ")
출력: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
NumPy와 range() 사용
NumPy의 arange()는 range()를 본떠 만들었지만 부동소수점 단계 지원:
문법
arange(start, stop, step)
예제
import numpy as np
for i in np.arange(10):
print(i, end=" ")
출력: 0 1 2 3 4 5 6 7 8 9
NumPy로 부동소수점 range
for i in np.arange(0.5, 1.5, 0.2):
print(i, end=" ")
출력: 0.5 0.7 0.8999999999999999 1.0999999999999999 1.2999999999999998
부동소수점 연산은 이진법이므로 긴 소수 확장이 나타날 수 있습니다. 필요시 반올림하세요.
요약
- range()는 시작, 정지, 단계로 정의된 정수 시퀀스 생성.
- 파이썬 3에 도입; xrange()는 파이썬 2의 전신.
- 양수 단계로 오름차순, 음수 단계로 내림차순.
- 실수 미지원; 실수엔 NumPy arange() 사용.
- 반복, 인덱싱,
list() 변환으로 요소 접근.
itertools.chain으로 범위 결합하거나 알파벳 같은 커스텀 시퀀스 생성.
- 대규모 숫자 범위엔 메모리 효율을 위해 제너레이터 동작 고려.