我试图保留一大堆元组的前k个元素列表。由于将其保存在内存中是不可能的,我想使用固定大小的列表来仅保留前k个值(使用键)。我曾尝试使用min heap但是python的堆很糟糕,因为它允许插入非唯一键。这是一个很大的问题。所以我认为我可以使用排序列表/字典(具有唯一键的元组)。使用sketch函数我检索子串在整个文本中出现的计数(O(1)时间))。我开始认为我对循环或弹出和赋值做了一些错误,因为minheap也有类似的问题,其中只有前k出现在25大小列表中,其余的是相当低的计数(当它在事实更高)
for line in lines[1::4]:
startIdx = 0
while startIdx + k <= (len(line)-k):
kmer = line[startIdx:(startIdx+k)]
count = randint(1, 250)
if count > 2:
if len(tdict.keys()) < topcount:
tdict[km] = count
else:
kMin = (sorted(tdict,reverse = False, key=lambda x: x[1]))
if count > tdict[kMin[0]]:
topkmerdict.pop(kMin[0])
topkmerdict[km] = count
startIdx += 1
linesProcessed += 1
答案 0 :(得分:1)
请尝试更改行:
kmerMin = (sorted(topkmerdict,reverse = False, key=lambda x: x[1]))
为:
kmerMin = (sorted(topkmerdict,reverse = False)
前一行只对字符串键值的第二个字符进行排序。