ただし、同様のタイプの質問が他の人から尋ねられています。here、しかしそれらはわずかに異なり、実際には私の問題を解決できなかったので、ここでもう一度行きます。
N 個のリスト (N>20,000) があり、各リストには M 個のリスト ( M >20,000) が次のように含まれています (データはダミーです)。
Key1: [ [4,3,1], [5,1,0] ...... [43,21,0 ] ] # List 1 with collection of M smaller lists
:
:
KeyN: [ [5,4,1], [55,1,1] ...... [ 221, 0, 0] ] # Nth list
データはソートされていません。しきい値のリストを 1 つずつ反復処理します。たとえばThreshold =[2, 3, 5, 7, 8]
、しきい値が中央の要素に適用される場合、すべてのキーについて、しきい値より大きいすべての要素を抽出します。たとえば。Threshold = 2
私が上に書いたデータによると、
For Key1: [ [4,3,1], [43,21,0]]
:
:
For KeyN: [[5,4,1]]
他のしきい値についても同様です。リストが多すぎるため、並べ替えが多くのオーバーヘッドに寄与しているため、回避したいと考えています。Pythonでこれを行う最適な方法は何ですか?. もう 1 つの重要な点は、私は自分でデータを構築しているので、最初にデータを格納するためのより良いデータ構造がある可能性があるということです。私は現在、ここで提案されたコンテナPersistentList
内の形式でデータを保存しています。以下は、それに使用されるコードのスニペットです。Btree
ZODB
for Gnodes in G.nodes(): # Gnodes iterates over N values
Gvalue = someoperation(Gnodes)
for Hnodes in H.nodes(): # Hnodes iterates over N values
Hvalue =someoperation(Hnodes,Gnodes)
score = SomeOperation on (Gvalue,Hvalue)
btree_container.setdefault(Gnodes, PersistentList()).append([Hnodes, score, -1 ])
transaction.savepoint(True)
transaction.commit()
それを行うための最も効率的な方法について何か提案はありますか? 最初にソートするのが本当に最適な方法ですか?