2016-11-23 19 views
2

2つのリストがあります:1つは、約200万の染色体位置の選択リストです([9866,9899,10257 ....])。もう1つは、染色体の位置とpvalueを持つペアのリストです(例:[(9866,0.001)、(9899,0.05)] ...)別のリスト(Python)を使用してペア要素リスト内の要素を見つけよう

選択した2百万の染色体のp値を取得したいと思います。私のコードは現在次のようになっています:

Selection = [] 
    for i in selected indices: 
     for x in list(range(len(T3))): 
     if T3[x][0] == i: 
      b = T3[x][0],T3[x][1] 
      Selection.append(b) 

これは最速の方法はありますか?明らかに、これはT3の各行と選択されたインデックスの各項目について繰り返すので、非常に遅いです。そして、そのマッピングを使用

mapping = dict(T3) 

:私は、設定された機能を使用して考えていたが、私のT3リストがペアの要素のリストそう

+1

2番目のポジションにポジションがある場合、なぜ最初のリストを使用しますか?私はあなたがしたいことを手に入れません。あなたの期待される出力を表示してください – MMF

+1

私は2番目のリストの位置を持っていますが、約1.4十億の位置があり、私は他のリストから2百万を選択したいだけです – CenCG

+0

今それはもっと明確です... – MMF

答えて

2

で、より高速なアプローチは、p値に位置からのマッピングを行うことになります。

selected_pvalues = [mapping[pos] for pos in positions] 

注:mappingが重複染色体位置を削除し、のみ元のリストの最後の1を維持します。

+0

T3が14億エントリであるため、「選択」操作を1回だけ行う必要がある場合は、これよりも高速なメソッドが必要です。 – Adirio

+0

@ juanpa.arrivillagaありがとうございました!私は十分な評判を持っていれば投票することを覚えています – CenCG

+0

@Adirio理由はわかりませんが、これは実際には驚くほど速かった – CenCG

1

最初のリストが2番目のすべてのペアの最初の要素とまったく同じ値を保持するかどうかはわかりません(私はそうでないと仮定します。

ペアリストを辞書に変換し、各値を(通常)O(1)ランタイムの複雑さで取得する必要があります。

編集

上記はかなり正常に動作する必要がありますが、レコードの数十億を扱っているとして、あなたの特定のケースも、メモリの問題を引き起こすかもしれませんが。ペアのリストを辞書に変換するとメモリが大量に消費され、全体的なパフォーマンスが低下する場合は別の方法を使用することができます。

最初の(小さい)リストをセットに変更します。次に、ペアのリストに行き、各要素について、そのセット内にあるかどうかを確認します。この方法では、まだ大きな構造体に1回のパスがありますが、必要なスペースは非常に少なくなります。

+0

をセットにすると、リスト内に重複したエントリがある可能性があり、選択したアイテムの順序の代わりにペアリストの順序が使用され、異なる場合があります。 – Adirio

+0

私はそれがOPによって必要とされているかどうかはわかりません)、セットではなく辞書を使用して解決することができます。そのキーは位置と値が元のリストのインデックスです。それでも、必要とされるメモリが大きさの順に小さくなっていることが確認されます。 – Mike

0

2番目のリストの染色体に別の識別子を格納するのが最善です。これにより、2番目のリストの代わりに辞書を作成することができます。たとえば、次のように

myTrillionsChromosomes = { 
    'chromosomeId': pValue, 
    ... 
} 

編集:あなたが実際にこれらのリストの構築を制御することができるかどうか、です。もう1つの答えは、タプルのリストを辞書に変換する方法を説明していますが、そのリストのサイズが大きければそれほど賢明ではないかもしれません。

次に、一定時間内に行われる辞書のp値を参照するだけで済みます。

selection = [] 
for id in identifiersList: 
    selection.append((id, myTrillionsChromosomes[id]) 
+1

コメントを削除しても情報が提供されないので、同じことをする必要があります。 Downvoteも削除されました。 – Adirio

関連する問題