Ian Kelly wrote: > On Tue, Dec 9, 2014 at 11:30 PM, Chris Angelico <ros...@gmail.com> wrote: >> Are you sure it isn't? Your 'space' is an iterable cubic >> cross-product. Your first loop checks (0,0,0) which is the first >> element returned, and is thus fast... but it also *consumes* that >> first element. The next time you test it, the entire space gets >> consumed, looking for another (0,0,0), which won't exist. That means >> iterating over 580**3 == 195112000 (two hundred million) tuples, and >> that *is* going to be slow. > > Huh, I wasn't even aware that membership tests worked on iterables with no > __contains__ method. Seems odd to me that 'x in y' should be supported but > not 'len(y)'.
To me def contains(iterable, value): for item in iterable: if item == value: return True return False seems to be a perfectly natural default behaviour. I don't see why >>> 42 in itertools.count() True should require that len(count()) must succeed. -- https://mail.python.org/mailman/listinfo/python-list