Python 中的“in”运算符用于比较什么?[复制]

What does the `in` operator in Python use for comparison? [duplicate]

提问人:DYZ 提问时间:1/27/2021 最后编辑:DYZ 更新时间:1/27/2021 访问量:113

问:

我试图了解使用什么机制来比较针和大海捞针。in

  1. [] in ([],[],[])是 ,所以它不可能是 ,因为是Trueis[] is []False
  2. 但是 是 ,所以它不可能是 ,因为 是 。math.nan in ([],[],math.nan)True==math.nan==math.nanFalse

如果它既不是(相等值的比较)也不是(对象身份的比较),它是什么?==is

python-3.x 平等 成员资格

评论

0赞 goalie1998 1/27/2021
是的。in
1赞 Chayim Friedman 1/27/2021
__contains__()
3赞 khelwood 1/27/2021
两者兼而有之。 在标准集合上,同时使用 and(或等效于 C)。__contains__is==
2赞 juanpa.arrivillaga 1/27/2021
@goalie1998有点没有回答这个问题,OP问的是“∈是如何确定的”
1赞 juanpa.arrivillaga 1/27/2021
@DYZ是的,对不起,我并不是要暗示它检查某些东西,我的意思是它同时使用两者。is ==

答:

3赞 bereal 1/27/2021 #1

正如文档所说:

对于容器类型(如 list、tuple、set、frozenset、dict 或 collections.deque),y 中的表达式 x 等效于 any(x is e or x == e for e in y)。

所以,两者兼而有之。

评论

0赞 dfundako 1/27/2021
无论如何,要看到使用?或者你只需要知道,当你看到时,它是实现的?dis.dis(in)
0赞 juanpa.arrivillaga 1/27/2021
@dfundako不,绝对不是作为 实现的。而你看不到这一点,它只会表明你正在使用二进制运算符。它相当于那个。isanydis.disis
1赞 bereal 1/27/2021
@dfundako在内部,列表是用 C 语言实现的,因此您无法在 .对于非内置容器,您可以检查 .dis__contains__
1赞 ShadowRanger 1/27/2021
@dfundako:它在C层深处使用了PyObject_RichCompareBool;你不会用 .这是一个 C 优化的测试,明确记录为基于身份/基于身份的短路。dis==!=