提问人:Lahcen YAMOUN 提问时间:1/27/2023 更新时间:1/27/2023 访问量:33
Python 设置哈希和 eq 默认调用策略
Python sets hash and eq default call strategy
问:
我遇到了一个问题,我需要优化代码的特定部分。我正在遍历一个调用的对象列表,对于每个对象,我正在调用一个将对象作为输入的函数。但是,我不想在类似的对象上多次调用该函数。最大调用数为 150,即使我没有处理所有对象,并且我不想使用全局计数器将验证委托给。
我有一个名为“lookup”的集合,我将其用作助手。我试图在两种方法之间做出决定:obs
do()
do()
do()
- 验证对象是否在查找集中,如果不是,则添加它并对其调用 do() 函数。
- 尝试将对象添加到查找集,如果集合的长度没有更改,请不要调用 do() 函数。 在这两种情况下,当集合的长度达到 150 时,我都会停止循环。
所以基本上对于第一种方法:
#obs is a list of my objects
def do(ob):
#some work on ob
lookup = set()
for ob in obs:
if ob not in lookup:
lookup.add(ob)
do(ob)
if len(lookup) == 150:
break
对于第二个:
#obs is a list of my objects
def do(ob):
#some work on ob
lookup = set()
for ob in obs:
old_len = len(lookup)
lookup.add(ob)
if len(lookup) != old_len:
do(ob)
if old_len+1 == 150:
break
哪种方法更好,为什么?我知道第二种方法显然是最好的方法,因为我们在片场只通过一次,在第一种解决方案上可能通过两次。但事实真的如此吗?是每次必要时都调用默认值和方法,还是仅在第一次调用,并在内部使用备忘录私有变量以避免不必要的哈希和相等函数调用?__hash__()
__eq__()
答: 暂无答案
上一个:字符串相等性未产生预期的输出
下一个:为什么相同的日期时间不相等?
评论