How Is Irange() Any Different From Range() Or Xrange()?
Solution 1:
irange()
returns a generator type, which can only be iterated over. Nothing else. Once you iterated over it, the generator is exhausted and can not be iterated over again.
The Python 2 xrange()
type and Python 3 range()
type are sequence types, they support various operations that other sequences support as well, such as reporting on their length, test for containment, and indexing:
>>>xr = xrange(10, 20, 3)>>>len(xr)
4
>>>10in xr
True
>>>xr[0]
10
>>>xr[1]
13
You can iterate over these objects more than once:
>>>for i in xr:...print i,...
10 13 16 19
>>>for i in xr:...print i,...
10 13 16 19
You can even use the reversed()
function to iterate over them in reverse, efficiently:
>>>for i inreversed(xr):...print i,...
19 16 13 10
The Python 3 range()
type is an improved version of xrange()
, in that it supports more sequence operations, is more efficient still, and can handle values beyond sys.maxint
(what would be a long
integer in Python 2).
It supports slicing, for example, which results in a newrange()
object for the sliced values:
>>>r = range(10, 20, 3)>>>r[:2]
range(10, 16, 3)
You can use negative indices just like you can with other Python sequences, to get elements counting from the end:
>>>r[-2]
16
>>>r[-2:]
range(16, 22, 3)
and the type supports testing for equality; two range()
instances are equal if they'd yield the same values:
>>> range(10, 20, 3) == range(10, 21, 3)
True
In Python 2, the only advantage the generator irange()
might have is that it doesn't suffer from the limitation to non-long integers that xrange()
is subjected to:
>>> import sys
>>> xrange(sys.maxint)
xrange(9223372036854775807)
>>> xrange(sys.maxint + 1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
OverflowError: Python int too large to convert to C long
Solution 2:
irange provides an generator which does not loads entire result into memory. Say you have range(1, 1000000)
in case a list of 1000000 numbers would be loaded into memory, whereas in case of xrange(1, 1000000)
, just one number would be in memory at a time.
Post a Comment for "How Is Irange() Any Different From Range() Or Xrange()?"