[英]Python: why is it faster to iterate over a list than iterating over an xrange() generator define on its length?
[英]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 y
是True
当且仅当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 == z
值z
,则x in y
为True
。 如果在迭代过程in
引发了异常,则好像引发了该异常。
最后,旧式迭代协议试图:如果一个类定义__getitem__()
x in y
是True
,当且仅当有一个非负整数索引i
使得x == y[i]
和所有下整数索引不会引发IndexError异常。 (如果引发了任何其他异常,则好像引发了该异常一样)。
从Python官方页面提取的信息: https : //docs.python.org/3/reference/expressions.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.