我有一个在python中创建哈希类的赋值,用于在包含限制酶的文本文件上实现,第一列中的序列和第二列中的RE名称。目标是创建一个随机的6bp序列,通过打印出相应的酶名称来查看它是否存在于文本文件中。我可以只使用列表,并将其转换为字典,并使用get()来检索相应的酶名称,但是我必须创建一个类。
这是哈希类和随机序列生成器(粘贴时可能会出现缩进错误):
class KeyValue:
def __init__(self,key,value):
self.key=key
self.value=value
def __str__(self):
return str(self.key)+":"+str(self.value)
class HashTable:
def __init__(self, SIZE):
i=0
self.list=[]
for i in range(SIZE):
self.list.append([])
i=i+1
self.SIZE = len(self.list)
def getValue(self,key):
h = self.hash(key)
bucket = self.list[h]
for kv in bucket:
if kv.key==key:
return kv.value
def setValue(self,key,value):
h = self.hash(key)
# should search first so we don't put key in twice, but for now ignore
self.list[h].append(KeyValue(key,value))
def hash(self, key):
i=0
total=0
while i<len(key):
total = total+ord(key[i])
i=i+1
return total % self.SIZE
def random_DNA(length):
return ''.join(random.choice('ATCG') for _ in xrange(length))
以下是用于导入模块的代码:
from HashTable import *
fh = open("restriction_enzymes.txt", "r")
num_lines = int(sum(1 for line in fh))
print num_lines
hashtable = HashTable(int(num_lines))
for line in fh:
(key, value) = line.strip().split('t')
hashtable.setValue(key, value)
print hashtable
DNA = random_DNA(6)
print DNA
print hastable.getValue(DNA)
print hashtable.getValue('AACGTT')
首先,我希望能够打印出哈希表。我希望能够将字典可视化。试图用线条&#34;打印哈希表&#34;在它创建之后,我得到输出:&#34; HashTable.HashTable实例位于0x7ff53555db90&#34;,我想这是内存中的位置?我是否必须在HashTable类中实现 str 或 repr 函数?有人可以协助吗?
关于程序的主要输出,如果我把变量DNA,随机序列,输入&#34;打印hashtable.getValue(DNA)&#34;,我得到&#34;无& #34 ;.好的,所以随机seq不在那里。所以,我尝试复制并粘贴文本文件中的第一个seq&#39; AACGTT&#39;这对应于RE AclI。但是,我仍然得到输出&#34;无&#34;。任何人都有任何想法,我在这里做错了吗?
文本文件中的所有seq标识符长度为4,6或8 bp。由于随机序列是6,如果它的4或8和6 bp seq匹配4或8中的某个位置,是否使用哈希函数知道拉它?或者我应该实现一个函数来尝试根据核苷酸匹配来拉它?
感谢所有帮助。最好的。