r...@zedat.fu-berlin.de (Stefan Ram) writes: > Ethan Carter <ec1...@somewhere.edu> wrote or quoted: >>## The question is how to write such an operator. I wrote this one: >>def op(x, b): >> return isinstance(x, int) or b > > The main snag with your op function and how you're using > reduce is the switch-up in the argument order that "reduce" > expects versus how you set up op. > > "functools.reduce" calls the reducer function "op" with two > arguments: the accumulated value so far first, then the > next element from the iterable. > > You wrote "op" as "op(x, b)", where you treat "x" like an element > and "b" like a boolean accumulator, but actually "reduce" hands > the accumulator first, then the element. > > So when "reduce" runs, the first argument "x" is actually the boolean > accumulator, and the second "b" is the next element.
You're a master. That happens to be the one thing I didn't check! I couldn't think of it, even though I'm well aware that not every binary operator is commutative. Such is life! Thanks so much! -- https://mail.python.org/mailman3//lists/python-list.python.org