Javier Novoa C.
Javier Novoa C.

Reputation: 11857

What's more efficient in Python: `key not in list` or `not key in list`?

Just found out that both syntax ways are valid.

Which is more efficient?

element not in list

Or:

not element in list

?

Upvotes: 2

Views: 189

Answers (2)

U13-Forward
U13-Forward

Reputation: 71610

When you're doing:

not x in y

And if x is in y, it will basically simplify to not True which is:

>>> not True
False

In the other hand, x not in y is just direct checking not in

To see the timings (always pretty similar):

>>> import timeit
>>> timeit.timeit(lambda: 1 not in [1,2,3])
0.24575254094870047
>>> timeit.timeit(lambda: not 1 in [1,2,3])
0.23894292154022878
>>> 

Also btw, not basically just do the opposite (if something is True, not will make it False, same point with the opposite

See not operator

Upvotes: 0

ShadowRanger
ShadowRanger

Reputation: 155684

They behave identically, to the point of producing identical byte code; they're equally efficient. That said, element not in list is usually considered preferred. PEP8 doesn't have a specific recommendation on not ... in vs. ... not in, but it does for not ... is vs. ... is not, and it prefers the latter:

Use is not operator rather than not ... is. While both expressions are functionally identical, the former is more readable and preferred.

To show equivalence in performance, a quick byte code inspection:

>>> import dis
>>> dis.dis('not x in y')
  1           0 LOAD_NAME                0 (x)
              2 LOAD_NAME                1 (y)
              4 COMPARE_OP               7 (not in)
              6 RETURN_VALUE

>>> dis.dis('x not in y')
  1           0 LOAD_NAME                0 (x)
              2 LOAD_NAME                1 (y)
              4 COMPARE_OP               7 (not in)
              6 RETURN_VALUE

Upvotes: 8

Related Questions