Python:如何检查一个项目是否被添加到一个集合中,没有 2x(散列,查找)

标签 python python-3.x set

我想知道是否有一种清晰/简洁的方法可以将某些内容添加到集合中并检查它是否在没有 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/

相关文章:

python - String.maketrans 用于英语和波斯语数字

Python 3 套接字编程 : using sendall vs. sendto

python-3.x - 使用来自 Python 3.8.1 C API 的 format_exc 返回 NoneType

python - 如何检查元组或列表中的所有元素是否都在另一个元组或列表中?

c++ - 插入以设置为 "Fixed"大小循环

python - 如何确定 Pandas 数据中每分钟的条目数

python - R 相当于 python numpy slice : [:, 无,:]

python - 如何转义 pandas to_csv 中的转义字符

python-3.x - 尝试在 Ubuntu 14.04 上安装 python 和 Django 时未满足的依赖项

python - 给定一个可迭代的集合和一个名称(字符串),返回一组与给定的 "name"相关联的名称