difference between range and xrange in python
-- In Python 2.x: --
range() creates a list, so if you do range(1, 10000000) it creates
a list in memory with 9999999 elements. This will become an expensive
operation on very large ranges.
xrange() is a sequence object that evaluates lazily. It is much more
optimised, it will only compute the next value when needed (via an
xrange sequence object) and does not create a list of all values like
range() does.
--- In Python 3: --
range() does the equivalent of python's xrange(), and to get the list.
In fact, in python 3, xrange() does not exist. If you want to write
code that will run on both Python 2 and Python 3, you can't use xrange().