我正在寻找一个数据结构来表示一些遗传数据。该数据可以表示为一个大小列表n
,其中每个条目还有一个“遗传位置”,它是一个介于 0 和 1 之间的实数。为了使命名清晰,我将列表中的位置id
称为遗传位置gpos
。我实现这个的方式是作为一个类
class Coords(object):
def __init__(self, *args, **kwargs):
self.f = list(*args, **kwargs)
self.r = dict()
for i,e in enumerate(self.f):
self.r[e] = i
def __setitem__(self,x,y):
self.f.__setitem__(x,y)
self.r.__setitem__(y,x)
def __getitem__(self,x):
return self.f.__getitem__(x)
def __len__(self):
return self.f.__len__()
现在,我有两个问题。第一个是 self.r 的索引是浮点数,这显然是个坏主意。我正在考虑将它们转换为字符串(具有固定位数),但有更好的主意吗?我遇到的另一个问题是我想通过 实现访问条目gpos
,因此,例如,如果我想访问gpos
0.2 到 0.4 之间的所有内容,我希望能够使用
import numpy as np
Coords(np.arange(1,0,-.1))
c.r[0.2:0.4]
有没有一种简单的方法来定义它?我正在考虑id
使用二进制搜索找到正确的开始和结束位置,然后self.f
使用这些 id 进行访问,但是有没有办法实现上述语法?