list
不能假定 s 是按排序顺序(或任何顺序)的,因此二分搜索不起作用。也不能假设密钥是可散列的,因此与dict
or set
哈希表查找不能用于加速搜索
据猜测,这是对从头到尾每个元素的直通检查。
我会尝试挖掘相关的Python源代码。
--
编辑:Pythonlist.__contains__()
函数,它实现了in
运算符,定义于列表对象.c http://hg.python.org/cpython/file/05274ab06182/Objects/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 检测到您正在测试某个元素的成员资格constant list
or set
, like:
if letter in ['a','e','i','o','u']: # list version
if letter in {'a','e','i','o','u'}: # set version
编辑 3 [@JohnMachin]:
常量列表优化为常量tuple见2.5-2.7和3.1-3.3。
常量集在 3.3 中被优化为(常量)冻结集。
另请参阅@CoryCarson 的回答。