我想知道是否有一种清晰/简洁的方法来向集合中添加内容,并判断它是否是在没有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,这是错误的.)

除此之外,如果双哈希/查找明显是性能瓶颈and,如果使用函数明显更快,我只会考虑这样做.

Python-3.x相关问答推荐

如何翻转以列形式给出的日期间隔并提取多个重叠时段内每小时的音量?

根据样本量随机 Select 组内样本

无法使用诗词安装PyYaml

谁能解释一下这个带邮编的多功能环路?

为什么 tkinter 在 tkinter 窗口外计算鼠标事件?

如何获取自定义文件上传路径的对象ID?

Pandas教程:如何更新行内数值的位置

将 rgb numpy 图像转换为 rgb 列表和相应的索引值

在 Python 中实现 COM 接口

单击图形时 plotly graph_objects 持久性数据

Python 3 - 给定未知数量的类别动态地将字典嵌套到列表中

使用 GEKKO 使用代码解决最佳时间控制问题时出现 IndexError

当我判断另一个 checkButton 时,如何判断两个 python tkinter checkButtons?

使用正则表达式提取字符串之间的文本

在 sklearn.decomposition.PCA 中,为什么 components_ 是负数?

为什么 virtualenv 会有效地禁用 Python 3 制表符补全?

ValueError:预期的 2D 数组,得到 1D 数组:

cv2 python 没有 imread 成员

如何区分文件之类的对象和文件路径之类的对象

如何删除目录? os.removedirs 和 os.rmdir 是否只用于删除空目录?