簡體   English   中英

為什么字典的 items 方法比直接迭代要快得多?

[英]Why items method for dictionary is so much faster than a straightforward iteration?

我正在練習 LeetCode 並遇到了這個問題。 我只是在學習python中的算法和數據結構,所以不太了解一些內置方法是如何實現的,所以我最初的嘗試是(python代碼)

return [num for num in Counter(nums) if Counter(nums)[num] == 1]

但是在這個測試用例上運行整個 12.82 秒。 另一方面,在討論中有一個非常相似的班輪

return [c[0] for c in Counter(nums).items() if c[1] == 1]

它使用相同的想法但運行速度更快,上述測試用例僅花費了 0.0022 秒。 為什么運行時會有這樣的差異?

此代碼的問題:

return [num for num in Counter(nums) if Counter(nums)[num] == 1]

是對於Counter(nums)中的每個num ,您必須創建一個新的Counter(nums)來確定if條件是真還是假。 通過在第二個版本中使用Counter(nums).items()

return [c[0] for c in Counter(nums).items() if c[1] == 1]

您已經可以訪問該數字及其計數,因此無需重新計算每個數字的計數。

注意我會把理解寫成

return [num for num, count in Counter(nums).items() if count == 1]

讓它更明顯一點是如何工作的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM