如何解决为什么字典的 items 方法比简单的迭代快得多?
我正在使用 LeetCode 练习,但遇到了 this 问题。我只是在python中学习算法和数据结构,所以不太了解一些内置方法是如何实现的,所以我最初的尝试是(python代码)
return [num for num in Counter(nums) if Counter(nums)[num] == 1]
但是在 this testcase 上运行需要整个 12.82 秒。另一方面,讨论中有very similar one liner
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]
是对于num
中的每个Counter(nums)
,您必须创建一个新的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]
使其工作原理更加明显。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。