gpt4 book ai didi

python - 查找给定位置的最接近的数字集

转载 作者:行者123 更新时间:2023-12-01 04:34:43 25 4
gpt4 key购买 nike

我有一本看起来像这样的字典:

exons = {'NM_015665': [(0, 225), (356, 441), (563, 645), (793, 861)], etc...}

另一个文件的位置如下:

isoform    pos    
NM_015665 449

我想要做的是打印文件中位置最接近的数字范围,然后打印该值最接近的数字范围内的数字。对于本例,我想打印 (356, 441),然后打印 441。我已经成功找到了一种方法来打印一组数字中与该值最接近的数字,但下面的代码只考虑了所列数字两侧的 10 个值。有没有什么方法可以考虑到每组范围之间存在不同数量的数字?

这是我到目前为止的代码:

with open('splicing_reinitialized.txt') as f:
reader = csv.DictReader(f,delimiter="\t")
for row in reader:
pos = row['pos']
name = row['isoform']
ppos1 = int(pos)
if name in exons:
y = exons[name]
for i, (low,high) in enumerate(exons[name]):
if low -5 <= ppos1 <= high + 5:
values = (low,high)
closest = min((low,high), key = lambda x:abs(x-ppos1))

最佳答案

我会将其重写为最小距离搜索:

if name in exons:
y = exons[name]
minDist = 99999 # large number
minIdx = None
minNum = None
for i, (low,high) in enumerate(y):
dlow = abs(low - ppos1)
dhigh = abs(high - ppos1)
dist = min(dlow, dhigh)
if dist < minDist:
minDist = dist
minIdx = i
minNum = 0 if dlow < dhigh else 1
print(y[minIdx])
print(y[minIdx][minNum])

这会忽略搜索范围,只搜索最小距离对。

关于python - 查找给定位置的最接近的数字集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31922682/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com