xor operator

Dom Grigonis dom.grigonis at gmail.com
Mon Nov 13 17:11:30 EST 2023


Benchmarks:
test1 = [False] * 100 + [True] * 2
test2 = [True] * 100 + [False] * 2

TIMER.repeat([
    lambda: xor(test1),     # 0.0168
    lambda: xor(test2),     # 0.0172
    lambda: xor_ss(test1),  # 0.1392
    lambda: xor_ss(test2),  # 0.0084
    lambda: xor_new(test1), # 0.0116
    lambda: xor_new(test2), # 0.0074
    lambda: all(test1),     # 0.0016
    lambda: all(test2)      # 0.0046
])
Your first function is fairly slow.
Second one deals with short-circuiting, but is super slow on full search.

`xor_new` is the best what I could achieve using python builtins.

But builtin `all` has the best performance.

DG

> On 13 Nov 2023, at 23:20, Michael Speer <knomenet at gmail.com> wrote:
> 
> I don't think an exclusive-or/truthy-entries-count-checker needs to be a builtin by any stretch.
> 
> >>> def xor( iterable, n = 1 ):
> ...     return sum( map( bool, iterable ) ) == n
> 
> Or if you insist on short circuiting:
> 
> >>> def xor_ss( iterable, n = 1 ):
> ...   for intermediate in itertools.accumulate( iterable, (lambda x, y: x + bool(y)), initial = 0 ):
> ...     if intermediate > n:
> ...       return False
> ...   return intermediate == n
> 
> 
> 
> On Mon, Nov 13, 2023 at 4:05 PM Barry via Python-list <python-list at python.org <mailto:python-list at python.org>> wrote:
> 
> 
> > On 13 Nov 2023, at 17:48, Dom Grigonis <dom.grigonis at gmail.com <mailto:dom.grigonis at gmail.com>> wrote:
> > 
> > Short circuiting happens, when:
> > xor([True, True, False, False], n=1)
> > At index 1 it is clear that the answer is false.
> 
> Can you share an example with 4 values that is true?
> And explain why it is xor.
> 
> Barry
> 
> -- 
> https://mail.python.org/mailman/listinfo/python-list <https://mail.python.org/mailman/listinfo/python-list>



More information about the Python-list mailing list