我想知道是否有一种清晰/简洁的方法可以将某些内容添加到集合中并检查它是否在没有 2x 哈希和查找的情况下添加。
这是你可能会做的,但它有 2x 项目的哈希值
if item not in some_set: # <-- hash & lookup
some_set.add(item) # <-- hash & lookup, to check the item already is in the set
other_task()
这适用于单个散列和查找,但有点难看。
some_set_len = len(some_set)
some_set.add(item)
if some_set_len != len(some_set):
other_task()
使用 Python 的 set api 有更好的方法吗?
最佳答案
我认为没有内置的方法可以做到这一点。当然,您可以编写自己的函数:
def do_add(s, x):
l = len(s)
s.add(x)
return len(s) != l
s = set()
print(do_add(s, 1))
print(do_add(s, 2))
print(do_add(s, 1))
print(do_add(s, 2))
print(do_add(s, 4))
或者,如果您更喜欢隐晦的单行代码:
def do_add(s, x):
return len(s) != (s.add(x) or len(s))
(这依赖于从左到右的评估顺序以及 set.add()
总是返回 None
的事实,这是错误的。)
除此之外,只有当双重哈希/查找明显是性能瓶颈时,我才会考虑这样做并且如果使用函数明显更快。
关于Python:如何检查一个项目是否被添加到一个集合中,没有 2x(散列,查找),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27427067/