簡體   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