0

私のタイトルは誤解を招く可能性がありますが、私の質問を明確にしましょう。

リストは次のとおりです。

chr1:100-200 100 100
chr1:350-500 150 250
chr1:780-880 100 350
chr1:900-950 50  400

つまり、基本的に最初の列は座標範囲、2番目の列は間隔の長さ(最初の列からの2つの座標間の減算)、3番目の列は間隔の長さの累積です。

これで、120という数字ができました。必要なのは次のとおりです。100<120 <250(オブジェクトをキーと比較するため)であり、キーは値 "chr1:350-500"を指している必要があります。同様に、私の番号が360の場合、350 <360 <400であるため、値は次のようになります: "chr1:900-950"

うまくいけば、私はそれを明確にしました。問題を解決するには辞書またはハッシュテーブルを使用する必要があると思いますが、ここではオブジェクトをキーと比較します。どうすればいいのかわかりません。

どうもありがとう

4

1 に答える 1

2

実は違う。

>>> ranges = ['chr1:100-200', 'chr1:350-500', 'chr1:780-880', 'chr1:900-950']
>>> accums = [100, 250, 350, 400]
>>> ranges[bisect.bisect_left(accums, 120)]
'chr1:350-500'
>>> ranges[bisect.bisect_left(accums, 360)]
'chr1:900-950'
于 2012-09-26T19:16:14.547 に答える