1

要素を持つ巨大なテーブル データ (またはレコード配列) があります。

tbdata[i]['a'], tbdata[i]['b'], tbdata[i]['c']

これらはすべて整数で、i0 から 100 万 (テーブルのサイズ) までの乱数です。

Nameまた、要素が (変更された) などのファイルのすべての名前 (合計 900 名'/Users/Desktop/Data/spe-3588-55184-0228.jpg') であり、すべて 3 つの数字を含むと呼ばれるリストもあります。

tbdataここで、上記の要素がすべて list の名前の 3 つの数字と一致するデータを my から選択したいと思いますName。最初に書いたコードは次のとおりです。

Data = []
for k in range(0, len(tbdata)):
    for i in range(0, len(NameA5)):
        if Name[i][43:47] == str(tbdata[k]['a']) and\
             Name[i][48:53] == str(tbdata[k]['b']) and\
             Name[i][55:58] == str(tbdata[k]['c']):
            Data.append(tbdata[k])

データのサイズが巨大であるか、アルゴリズムが遅すぎるため、Python は一晩中実行されましたが、まだ完了していません...そのようなタスクを完了するための最速の方法は何ですか? ありがとう!

4

1 に答える 1

1

次のようなルックアップ ツリーを作成できます。

a2b2c = {}
for name in NameA5:
    a = int(name[43:47])
    b = int(name[48:53])
    c = int(name[55:58])

    if a not in a2b2c2name:
        a2b2c2name[a] = {}
    if b not in a2b2c2name[a]:
        a2b2c2name[a][b] = {}
    a2b2c2name[a][b][c] = True

for k in range(len(tbdata)):
    a = tbdata[k]['a']
    b = tbdata[k]['b']
    c = tbdata[k]['c']
    if a in a2b2c2name and b in a2b2c2name[a] and c in a2b2c2name[a][b]:
        Data.append(tbdata[k])
于 2016-01-07T02:00:39.457 に答える