What algorithm is used when using the in operator in python to search a list?
(P)When using the'in'operator to search for an item in a list e.g.(p)字母名称(P)什么算法是用来搜索这个项目。是从开始到结束,还是从开始使用像二进制搜索一样的东西?(p)
不能假定
大概是对每个元素从头到尾的直接检查。
我将尝试挖掘相关的Python源代码。
——
编辑:在listObject.c中定义了实现
1 2 3 4 5 6 7 8 9 10 11 | 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检测到您正在测试常量
1 2 | if letter in ['a','e','i','o','u']: # list version if letter in {'a','e','i','o','u'}: # set version |
编辑3[@johnmachin]:
常量列表优化为2.5-2.7和3.1-3.3中的常量元组。常量集在3.3中优化为(常量)冻结集。
另见@corycarson's answer。
如果