セットにない単一の整数を取得する合理的に効率的な方法を見つけようとしています。たとえば、 がある場合numbers={1, 4, 9}
、有効な結果は になります3
。私はこのようにすることができます:
n = random.randint(-100, 100)
if n not in numbers:
return n
しかし、セットがどれだけ大きくなるかわからないので、任意の範囲 (-100 -> 100 など) に制限されたくありません。他のオプションは、すべての整数を反復処理することですが、それは非常に非効率的です。
これを行うためのより良い方法について何か提案はありますか?
編集:私がやろうとしていることについての質問が多いため、背景の一部を説明するためにこの質問を更新しています。
私が実際に達成しようとしているのは、次のようなマッピングです: {a: 1, b: 2, c: 1}
where a
、b
andc
はオブジェクト インスタンスです。このグループの値は一意であるため、グループ 1 にa
あり、グループ 2 にあることがわかります。実際の数は関係ありません。グループの一意のキーに過ぎず、この構造の外部には何にも関連しません。実際の構造は 2 つのフィールドを持つデータベース テーブルであり、両方ともインデックスが付けられているため、たとえば と同じグループに他に何があるかをすぐに見つけることができます。c
b
a
一意の番号が必要なのは、グループを追加するときです。これは頻繁に発生するわけではないので、それほど効率的である必要はありませんが、データ量が非常に大きくなる可能性があるため、反復回数を抑える必要があります。許容できる制限付きでこれを行う簡単な方法がいくつかあることを認識しています。たとえばrandint
、大きな範囲 (1e6 など) を使用したり、場合によってはデータベース関数を使用したりすることもできます。しかし、私はこれについて考えてきたので、ハードコーディングされた制限なしで値を入力するためのきちんとした解決策を見つけることが興味深い問題になりました. 明らかに、メモリの制限 (整数の最大サイズなど) は引き続き適用されます。