我试图找到一种合理有效的方法来获取不在集合中的任何单个整数。因此,例如,如果我有numbers={1, 4, 9}
,那么有效的结果将是3
。我可以这样做:
n = random.randint(-100, 100)
if n not in numbers:
return n
但我不想被限制在任意范围内(例如 -100 -> 100),因为我不知道该集合有多大。另一种选择是遍历每个整数,但这将非常低效。
有没有人对这样做的更好方法有任何建议?
编辑:由于关于我正在尝试做什么的问题很多,我正在更新这个问题以解释一些背景。
我实际上想要实现的是这样的映射:where 和{a: 1, b: 2, c: 1}
是a
对象实例。这个值是一个组的唯一值,所以我可以告诉它,并且在第 1 组和第 2 组中。实际数字无关紧要,它只是组的唯一键,与此结构之外的任何内容都无关。实际结构是一个包含两个字段的数据库表,这两个字段都已编入索引,以便我可以快速找出,例如,与.b
c
a
c
b
a
现在我需要唯一的号码,是当我想添加一个组时。这不会经常发生,因此它不必非常高效,但由于数据量可能会变得非常大,我需要降低迭代次数。我意识到有一些简单的方法可以在可接受的限制下执行此操作,例如使用randint
大范围(例如 1e6),或者甚至可能使用数据库函数。但是,由于我一直在考虑这一点,因此找到一个巧妙的解决方案来填充没有硬编码限制的值已成为一个有趣的问题。显然内存限制(例如整数的最大大小)仍然适用。