不能假定lists是按排序顺序(或任何顺序)进行的,因此二进制搜索将无法工作。也不能假定这些键是可散列的,因此与dict或{}不同的是,哈希表查找不能用于加速搜索
猜猜看,这是对每个元素从头到尾的直接检查。在
我将尝试挖掘相关的Python源代码。在
在
编辑:实现list.__contains__()运算符的Pythonlist.__contains__()函数在listobject.c中定义:393 static int
394 list_contains(PyListObject *a, PyObject *el)
395 {
396 Py_ssize_t i;
397 int cmp;
398
399 for (i = 0, cmp = 0 ; cmp == 0 && i < Py_SIZE(a); ++i)
400 cmp = PyObject_RichCompareBool(el, PyList_GET_ITEM(a, i),
401 Py_EQ);
402 return cmp;
403 }
它迭代列表中的每个元素,从第一个元素到最后一个元素(或直到找到匹配项为止)。在
在
编辑2:图变粗。如果Python检测到您正在测试一个常量list或{}中元素的成员身份,比如:
^{pr2}$
编辑3[@JohnMachin]:
在2.5-2.7和3.1-3.3中,常量列表被优化为常量元组。
常数集在3.3中优化为(常数)冻结集。在
另请参见@CoryCarson的答案。在