2

我正在尝试保留一大组元组的前 k 个元素的列表。由于不可能将其保存在内存中,因此我想使用固定大小的列表来仅保留前 k 个值(使用键)。我曾尝试使用最小堆,但 python 的堆很糟糕,因为它允许插入非唯一键。这是一个巨大的问题。所以我想我可以使用排序列表/字典(具有唯一键的元组)。使用草图函数我检索子字符串在整个文本中出现的计数(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
4

1 回答 1

1

请尝试更改线路:

  kmerMin = (sorted(topkmerdict,reverse = False, key=lambda x: x[1]))

至:

  kmerMin = (sorted(topkmerdict,reverse = False)

上一行仅对字符串键值的第二个字符进行排序。

于 2017-07-28T21:00:51.720 回答