currently, testing for &quot;x in xrange(y)&quot; is an O(n) operation.<br><br>since xrange objects (which would become range in py3k) are not real lists,<br>there&#39;s no reason that __contains__ be an O(n). it can easily be made into
<br>an O(1) operation. here&#39;s a demo code (it should be trivial to implement<br>this in CPython)<br><br><br>class xxrange(object):<br>&nbsp;&nbsp;&nbsp; def __init__(self, *args):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if len(args) == 1:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.start
, self.stop, self.step = (0, args[0], 1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elif len(args) == 2:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.start, self.stop, self.step = (args[0], args[1], 1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; elif len(args) == 3:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.start, self.stop, self.step
 = args<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; raise TypeError(&quot;invalid number of args&quot;)<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; def __iter__(self):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i = self.start<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while i &lt; self.stop:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; yield i<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i += 
self.step<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; def __contains__(self, num):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if num &lt; self.start or num &gt; self.stop:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return False<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (num - self.start) % self.step == 0<br><br><br>print list(xxrange(7))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # [0, 1, 2, 3, 4, 5, 6]
<br>print list(xxrange(0, 7, 2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # [0, 2, 4, 6]<br>print list(xxrange(1, 7, 2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # [1, 3, 5]<br>print 98 in xxrange(100)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # True<br>print 98 in xxrange(0, 100, 2)&nbsp;&nbsp;&nbsp; # True<br>print 99 in xxrange(0, 100, 2)&nbsp;&nbsp;&nbsp; # False
<br>print 98 in xxrange(1, 100, 2)&nbsp;&nbsp;&nbsp; # False<br>print 99 in xxrange(1, 100, 2)&nbsp;&nbsp;&nbsp; # True<br><br><br><br>-tomer<br>