<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<p>I recently came across a bug where checking negative membership (__contains__ returns False) of an infinite iterator will freeze the program.</p>
<p><br>
</p>
<p>It may seem a bit obvious, but you can check membership in range for example without iterating over the entire range.<br>
</p>
<p><br>
</p>
<p>`<span>int(1e100) in range(int(1e101))`</span> on my machine takes about 1.5us<br>
`int(1e7) in itertools.count()` on my machine takes about 250ms (and gets worse quite quickly).</p>
<p><br>
</p>
<p>Any membership test on the infinite iterators that is negative will freeze the program as stated earlier, which is odd to me.</p>
<p><br>
</p>
<p>itertools.count can use the same math as range</p>
<p>itertools.cycle could use membership from the underlying iterable</p>
<p>itertools.repeat is even easier, just compare to the repeatable element</p>
<p><br>
</p>
<p>Does anyone else think this would be useful?<br>
</p>
</div>
</body>
</html>