2

Just found out that both syntax ways are valid.

Which is more efficient?

element not in list

Or:

not element in list

?

U13-Forward
  • 69,221
  • 14
  • 89
  • 114
Javier Novoa C.
  • 11,257
  • 13
  • 57
  • 75

2 Answers2

8

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
ShadowRanger
  • 143,180
  • 12
  • 188
  • 271
0

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

U13-Forward
  • 69,221
  • 14
  • 89
  • 114