我有一本字典看起来像这样:
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))
功能替代品:)。这可能会跑得更快。很明显,由于函数式编程的优点,它对RAM非常友好,并且可以很容易地并行化。我希望你会觉得学习起来很有趣。你知道吗
这个指纹
第一个元组是一个范围。第二个元组中的第一个整数是间隔中最近的点,第二个整数是距离。你知道吗
我会把它改写成最小距离搜索:
这会忽略搜索范围,只搜索最小距离对。你知道吗
相关问题 更多 >
编程相关推荐