pythonsequencecontainsin-operatornot-operator

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

?


Solution

  • 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