파이썬(python)에서 range 함수는 자주 쓰이는 함수 중 하나입니다. 등간격의 정수 리스트 자체가 필요할 때도 쓰이지만,
시퀀셜 자료를 인덱싱할 숫자들를 만들어낼 때도 쓸모가 있습니다. 그런데 파이썬에는 ranage와 비슷한 함수가 또 있습니다.
바로 xrange와 arange입니다.
xrange는 range 함수와 마찬가지로 built-in 함수입니다. range와 사용방법도 같습니다.
그런데 xrange는 range 함수처럼 리스트를 리턴하는 것이아니라 xrange 객체를 리턴합니다. xrange 객체는 익덱싱 등의 요청이 있을 때마다 해당하는 값을 리턴해주며 range와 매우 유사한 방식으로 이용할 수 있습니다. 하지만 리스트 리턴값이 필요한 표현은 사용할 수가 없습니다. 이런 방식의 장점은 리스트를 만드는 시간과 리스트가 차지하는 메모리를 절약할 수 있다는 것입니다. 필요한 정수 리스트가 길면 길 수록 효과가 더 눈에 띄겠죠.
다음은 arange입니다. arange는 built-in 함수는 아니고 numpy나 numeric 모듈을 설치하면 사용할 수 있습니다. arange는 영단어 arrange와는 별 관계가 없고 array range 정도로 생각하시면 되겠습니다. 말 그대로 range 사용방법과 같으나 리스트를 리턴하는 것이 아니라 행렬(array)를 리턴합니다.행렬arange의 장점은 리스트range에서는 사용할 수 없는 실수를 사용할 수 있고, 리스트에 없는 다양한 메소드가 있으며, 행렬 계산으로 리스트보다 빠른 속도로 계산할 수 있다는 것입니다. 행렬에 대해서는 이 곳을 참고하시기 바랍니다.
xrange는 range 함수와 마찬가지로 built-in 함수입니다. range와 사용방법도 같습니다.
xrange(start, stop, step)
그런데 xrange는 range 함수처럼 리스트를 리턴하는 것이아니라 xrange 객체를 리턴합니다. xrange 객체는 익덱싱 등의 요청이 있을 때마다 해당하는 값을 리턴해주며 range와 매우 유사한 방식으로 이용할 수 있습니다. 하지만 리스트 리턴값이 필요한 표현은 사용할 수가 없습니다. 이런 방식의 장점은 리스트를 만드는 시간과 리스트가 차지하는 메모리를 절약할 수 있다는 것입니다. 필요한 정수 리스트가 길면 길 수록 효과가 더 눈에 띄겠죠.
>>> xrange(5)
xrange(5)
>>> xrange(5)[3]
3
>>> [n for n in xrange(5)]
[0, 1, 2, 3, 4]
>>> xrange(5)[2:-1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence index must be integer, not 'slice'
>>> xrange(5)+[5,6,7]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'xrange' and 'list'
xrange(5)
>>> xrange(5)[3]
3
>>> [n for n in xrange(5)]
[0, 1, 2, 3, 4]
>>> xrange(5)[2:-1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence index must be integer, not 'slice'
>>> xrange(5)+[5,6,7]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'xrange' and 'list'
다음은 arange입니다. arange는 built-in 함수는 아니고 numpy나 numeric 모듈을 설치하면 사용할 수 있습니다. arange는 영단어 arrange와는 별 관계가 없고 array range 정도로 생각하시면 되겠습니다. 말 그대로 range 사용방법과 같으나 리스트를 리턴하는 것이 아니라 행렬(array)를 리턴합니다.