微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么字典的 items 方法比简单的迭代快得多?

如何解决为什么字典的 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 举报,一经查实,本站将立刻删除。