파이썬을 개발하다 보면 반복문을 사용해야 하는 경우가 상당히 많다. 아니 소프트웨어 자체에서 반복문은 빼놓을 수 없다. 그래서 오늘은 파이썬의 반복문에서 많이 활용되는 range() 내장함수에 대해서 정리해 보려고 한다.
range() 함수는 간단히 말해 정해진 범위 내의 연속된 숫자들을 생성하는 기능이다.
range() 함수의 개념
함수의 사용 방법은 간단하지만 개념과 특징을 정확히 알고 사용하는 것이 중요하다. range() 함수는 숫자의 연속된 시퀀스를 생성하는 파이썬의 내장함수이며, 이 함수는 주로 반복문과 함께 사용되어 특정 횟수만큼 반복하거나 리스트 들의 자료구조에 접근할 때 유용하게 사용될 수 있다.
range() 함수의 사용 방법은 보통 세 가지가 있다. 매개변수로 전달하는 값에 따라서 기능이 조금 다르게 동작하는데, 각 방식별로 알아보자.
range(stop)
위와 같이 매개변수를 하나만 전달하는 경우에는 해당 매개변수를 생성되는 숫자 시퀀스의 가장 마지막 값으로 인식한다.
예를 들어, 5로 입력하면 0부터 1씩 증가하여 4까지 생성하게 된다. 전달받은 값에서 -1만큼 길이를 정하여 생성하게 된다.
range(start, stop)
위와 같은 방식은 시작하는 값과 마지막 값을 직접 설정하여 전달하는 방식이다.
예를 들어, range(1, 5)로 압력하였다면, 1부터 4까지 생성하게 된다. 시작하는 값은 포함이 되며, 마지막 값은 포함이 되지 않는다.
range(start, stop, step)
위의 방식은 시작하는 값, 마지막 값, 그리고 얼마씩 증가하며 숫자를 생성할지의 step값을 전달하는 방식이다.
예를 들어, range(1, 10, 2)로 입력하였다면, 1부터 2씩 증가하여 1, 3, 5, 7, 9의 값들이 생성된다.
range() 함수의 활용
range() 함수의 간단한 활용 예제를 통해서 어떻게 사용하는지 정리해 보았다.
반복문
for i in range(5):
print(i)
위와 같이 기본적으로 for in 번복문을 사용할 때 같이 사용한다면 효율적으로 작업을 처리할 수 있다.
특정 범위 합
total = 0
for i in range(1, 6):
total += i
print(total)
먼저 설명한 바와 같이 시작 값과 마지막 값을 지정할 수 있으며, 위와 같이 시작 값과 마지막 값을 지정하면 특정 범위만 손쉽게 순회할 수 있고, 해당 범위의 합을 구하는 등의 처리를 할 수 있다.
숫자의 역순
num = int(input("숫자를 입력하세요: "))
for i in range(num, 0, -1):
print(i)
위와 같은 경우는 사용자가 입력한 값을 기준으로 역순으로 순회하며 해당 인덱스를 출력하는 예제다. 입력받은 숫자에서 0까지 -1씩 차감하면서 내려오게 된다. 만약 5를 입력했다면 5, 4, 3, 2를 출력하게 된다.
리스트의 인덱스로 접근
my_list = ["apple", "banana", "cherry", "date"]
for i in range(len(my_list)):
print("Index", i, ":", my_list[i])
위의 코드는 리스트를 기준으로 범위를 설정하고 반복문을 순회할 때 해당 요소의 인덱스로 리스트 내의 요소를 접근하는 방법이다. 위와 같은 경우도 상당히 많이 사용하는 방법이다.
리스트 요소의 합
total = sum(range(1, 11))
위와 같이 sum() 함수와 같이 사용한다면 간단하게 범위의 합을 구할 수 있다. 시작 값은 1이고 마지막 값은 11이므로 1부터 10까지의 합을 구할 수 있다.
리스트 요소의 제곱
squared_numbers = [x**2 for x in range(1, 6)]
위와 같은 경우는 range() 범위를 기준으로 순회하면서 모든 요소의 제곱을 구하는 예제다.
위와 같이 리스트 컴프리헨션 방식을 사용한다면 간단하고 가독성 있게 활용할 수 있다.
리스트 컴프리헨션 (List Comprehension)
리스트 컴프리헨션은 파이썬에서 리스트를 생성하는 간단하고 강력한 방법 중 하나다. 반복문과 조건문을 사용하여 한 줄의 코드로 리스트를 생성할 수 있다.
이렇게 range() 함수는 다양한 상황에서 활용이 가능하며, 보통은 반복문에서 주로 사용되기 때문에 반복 작업을 할 때 참고해서 활용하면 좋을 것 같다.
range() 함수의 성능
파이썬은 인터프리터 언어고, 대용량 데이터 처리, 빅데이터 처리 등 다양한 상황에서 많이 사용되는데, 그만큼 함수 하나하나의 특징과 성능을 잘 파악하고 사용하는 것이 중요하다. range() 함수는 버전, 매개변수, 콘텍스트 등에 따라서 성능이 다를 수 있다. 어떤 특징이 있는지 살펴보자.
메모리 사용량
range() 함수는 숫자를 생성할 때에는 숫자 시퀀스를 미리 생성하지 않고 필요할 때에만 숫자를 생성하므로 매모리 사용량이 낮은 편에 속한다. 그렇기 때문에 대용량 숫자 시퀀스를 다룰 때에도 메모리 부담이 적다.
속도
range() 함수는 내부적으로는 C로 작성되어 있기 때문에 일반적으로 빠르고 효율적이다. 앞서 설명한 바와 같이 숫자 시퀀스를 생성할 때 걸리는 시간이 걸리는 것은 거의 없으며, 대부분의 상황에서는 빠른 속도를 제공하고 있다.
매개변수
range() 함수에 사용되는 매개변수에 따라서 성능이 조금씩 다를 수 있다. 특히 큰 범위를 다룰 때에는 시작과 끝 값 사이의 거리가 크고 간격이 큰 경우에는 성능이 떨어질 수 있다.
파이썬의 버전
사용하는 파이썬의 버전에 따라서 range() 함수의 내부 구현이 다를 수 있으므로 이로인해 성능이 다를 수 있다. 최신 버전의 파이썬을 사용할수록 보다 효율적인 성능을 제공하므로 참고하여 버전을 선택하는 것이 좋다.
정리한 바와 같이 파이썬의 range() 함수는 메모리 사용량이 적고 성능이 우수하므로 반복 작업애서 해당 함수를 적절히 사용하면 좋은 성능을 낼 수 있을 것 같다.
마무리
파이썬의 range() 함수에 대해서 정리해 보았는데, 생각보다 높은 효율을 낼 수 있는 함수라는 것을 알게 되었다. 반복 작업에서 버릇처럼 생각 없이 사용해 왔지만, 이렇게 함수의 내부적인 특징을 파악하고 사용하면 업무에서 훨씬 더 효과적으로 사용할 수 있을 것 같다.
* 경제지표 시각화 서비스
Economy Flow
econoflow.co.kr
'Python' 카테고리의 다른 글
파이썬 enumerate() 함수의 개념과 활용! (0) | 2024.05.16 |
---|---|
파이썬 리스트 컴프리헨션의 개념과 특징을 살펴보기! (0) | 2024.05.15 |
파이썬 다양한 자료형의 길이를 확인하는 len() 함수 알아보기 (0) | 2024.05.09 |
파이썬의 딕셔너리 dict() 함수의 개념과 활용 (0) | 2024.05.08 |
파이썬 time data 'X' does not match format '%Y-%m-%d' 에러 해결하기 (time.strptime()) (0) | 2023.01.27 |