2017-11-29 8 views
0

私は5000の整数値のリスト/配列を持っています。 と整数は10000〜20000です。 整数は2060の異なる値があります。高速ハッシュバケットを1に、そしてnをPythonに入れます

初期値を[0-2059]に「再ハッシュ」する方法はありますか?辞書に整数の

13457 --> 0 
    13260 --> 1 
    14237 --> 2 

初期順序値をassignementを使用せずに はそれだけで再スケーリングだ、問題ではありません。 1つの解決策が[0-2599]バケットにハッシュする可能性があると考えてください。

ありがとう

答えて

1

EDIT:私のオリジナルの答え(下記)dictを使用しませんが、setを使用しないが、そのOPが求めているものではありません。 linpingta's answerは、例えば、正しい:

lst = [100 , 137 , 200 , 137] 
new_lst = [lst.index(item) for item in lst] 
print(new_lst) 

出力:

[0, 1, 2, 1] 
lst.index(item)

lstitem内の最初の出現の指標を返すので、これは動作します。


オリジナルの答え:

lst = [100 , 137 , 200 , 137] 
new_lst = [list(set(lst)).index(item) for item in lst] 
print(new_lst) 

出力:(!)私は、値のリストのサイズ>カーディナリティを編集

[2, 1, 0, 1] 
+0

アイデアは値を保存することではありません....それは不可能に見えます – Tensor

+0

それはうまく見えますが、ハッシュを使用する方法はありますか? – Tensor

+0

いいえ、 '[0、2060]の範囲の値を返すこのような「ハッシュ」関数は、ルックアップテーブルを使用します。 – scrpy

1

list.index(x)を直接使用していますか?

def f(l, x): 
    return l.index(x) if x in l else -1 
+0

を – Tensor

+0

ので、この解決策は、この_does_ @Tensor – Tensor

+0

を動作しません。 'l.index(x)'は 'l'の' x'の最初の出現のインデックスを返します。 – scrpy

関連する問題