0

也许我的标题可能会产生误导,但让我澄清一下我的问题:

这是一个列表:

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

所以基本上第一列是坐标范围,第二列是区间长度(第一列两个坐标之间的减法),第三列是区间长度的累加。

现在我有一个数字,比如说 120。我需要做的是:因为 100 < 120 < 250(将我的对象与键进行比较),并且键应该指向值“chr1:350-500”;同样,如果我的号码是 360,因为 350 < 360 < 400,所以值应该是:"chr1:900-950"

希望我已经说清楚了。我想我应该使用字典或哈希表来解决问题,但这里涉及将我的对象与键进行比较;我不知道该怎么做。

非常感谢

4

1 回答 1

2

Actually, no.

>>> 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 回答