繁体   English   中英

为什么Python中的“执行”操作比迭代列表要快?

[英]Why is “in” operation in Python faster than iterating a list?

例如,我想确定列表A中是否存在某个数字a。如果我return a in A使用return a in A ,这将比编写像这样的迭代函数快得多

for number in A: 
    if a == number:
        return True

到底是什么东西? Python是否使用其他方式来确定成员资格? 我浏览了Python文档,但没有找到答案。

6.10.2。 会员资格测试操作

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

对于字符串,字节类型, x in yTrue当且仅当x是y的子串。 等效测试为y.find(x) != -1 空字符串始终被视为任何其他字符串的子字符串,因此"" in "abc"将返回True

对于定义__contains__()方法的用户定义的类,如果y.__contains__(x)返回true,则y.__contains__(x) x in y返回True ,否则返回False

对于未定义__contains__()但定义__iter__()用户定义类,如果在迭代y生成了x == zz ,则x in yTrue 如果在迭代过程in引发了异常,则好像引发了该异常。

最后,旧式迭代协议试图:如果一个类定义__getitem__() x in yTrue ,当且仅当有一个非负整数索引i使得x == y[i]和所有下整数索引不会引发IndexError异常。 (如果引发了任何其他异常,则好像引发了该异常一样)。

从Python官方页面提取的信息: https : //docs.python.org/3/reference/expressions.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM