Tha*_*ana -3 python performance set
我有两个大整数集set1和set2. 谁能告诉我下面哪一个更有效?
例子:
if(set1 == set2)
Run Code Online (Sandbox Code Playgroud)
或者
if(len(set1)==len(set2))
Run Code Online (Sandbox Code Playgroud)
ant*_*rov 18
正如 Nikhil Wagh 已经解释的那样,在最初的问题中,比较集合的长度和检查两个集合的相等性之间存在混淆。我只想补充一点,简单s1 == s2就足够了并且高效,因为 __eq__() (及其相反的 __ne__())方法已经执行了此优化。它首先检查集合是否具有相同的长度,然后检查集合是否具有相同的哈希值,然后才执行set_issubset检查。
set_richcompare()您可以在文件中找到设置相等检查函数的实现setobject.c。你不需要成为 C 语言的期望来理解算法 - https://github.com/python/cpython/blob/master/Objects/setobject.c
Nik*_*agh 10
您确实了解这两个陈述彼此完全不同。
if(set1==set2) 比较两个集合中每个元素的相等性,当且仅当两个集合完全相同时才计算为真。
而if(len(set1)==len(set2))只比较两个集合的长度。即使您有两个长度相同的集合,也可能会出现它们不相同的情况。例如,考虑一下:
set1: [1, 3, 6, 29, 31]
set2: [1, 3, 7, 10, 15]
尽管这些集合具有相同的长度,但它们并不相同。
您可以这样做以节省时间。
if len(set1) == len(set2):
if set1 == set2:
//TODO when sets are equal
else
//TODO when sets are not equal.
else
//TODO when sets are not equal
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17465 次 |
| 最近记录: |