![](/img/trans.png)
[英]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.