什么';在Python中,`key not in list`或`not key in list`更有效?

什么';在Python中,`key not in list`或`not key in list`更有效?,python,sequence,contains,in-operator,not-operator,Python,Sequence,Contains,In Operator,Not Operator,刚刚发现这两种语法方法都是有效的 哪个更有效 element not in list 或: 它们的行为相同,甚至产生相同的字节码;它们同样有效。也就是说,元素不在列表中通常被认为是首选元素。PEP8没有关于not。。。在与中。。。不在中,但它适用于非。。。是vs.。。。不是,并且: 使用不是运算符,而不是非运算符。。。是。虽然两个表达式在功能上完全相同,但前者更具可读性且更可取 要显示性能的等效性,请快速检查字节码: >>> import dis >>> d

刚刚发现这两种语法方法都是有效的

哪个更有效

element not in list
或:


它们的行为相同,甚至产生相同的字节码;它们同样有效。也就是说,
元素不在列表中
通常被认为是首选元素。PEP8没有关于
not。。。在
与中。。。不在中,但它适用于非。。。是vs.
。。。不是
,并且:

使用
不是
运算符,而不是
非运算符。。。是
。虽然两个表达式在功能上完全相同,但前者更具可读性且更可取

要显示性能的等效性,请快速检查字节码:

>>> 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
当你在做:

not x in y
如果
x
y
中,它基本上会简化为
非真
,即:

>>> not True
False
另一方面
x不在y中
只是直接检查
不在

要查看时间安排(总是非常相似):

顺便说一句,
not
基本上只是做相反的事情(如果某件事是真的,not会使它成为假的,相反的事情也是一样的)


请参见

@Downvoter为什么downvoteI没有进行向下投票,但您自己的链接显示字节码是相同的,所以…。@juanpa.arrivillaga这是真的,很抱歉,为什么只有这些,可能类似于(
a不是None
不是a是None
)等。。
>>> not True
False
>>> import timeit
>>> timeit.timeit(lambda: 1 not in [1,2,3])
0.24575254094870047
>>> timeit.timeit(lambda: not 1 in [1,2,3])
0.23894292154022878
>>>