Nested loops is strangely slow, totally at a loss.
Steven D'Aprano
steve at pearwood.info
Wed Dec 10 02:21:25 EST 2014
On Wed, 10 Dec 2014 17:53:05 +1100, Chris Angelico wrote:
> On Wed, Dec 10, 2014 at 5:44 PM, Steven D'Aprano <steve at pearwood.info>
> wrote:
>> It would be nice if product iterators behaved like xrange() objects and
>> could perform "in" tests without exhausting the iterator, but they
>> don't. That's sad.
>
> It'd be very difficult to do that in the general sense. But it should be
> possible to have a multi-dimensional range object that behaves the way
> Py3's range object does, including membership tests and stuff. (Might
> already exist, for all I know.) That would do what the OP wants, I
> think.
Oh yes. If the product object has n-ordinates, then you could implement
it something vaguely like this:
def contains(product_obj, item):
if not isinstance(item, tuple):
return False
if len(item) != number_of_ordinates:
return False
for i, x in enumerate(item):
if x not in ordinate[i]:
return False
return True
but note that this too might exhaust the product iterator, if it is
constructed from iterators! But for the case whether it is constructed
from xrange objects, lists, tuples, etc. it would work fine.
Strings are another funny case: consider what happens here:
("bc", "x", "1") in product("abcd", "wxyz", "1234")
It should return False, but since string containment tests operate on
substrings not just single characters, it will wrongly return True.
--
Steven
More information about the Python-list
mailing list