递归地找到正确的读取顺序

2024-06-24 13:46:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我在这项工作上有几个小时的麻烦,我只是在做什么。你知道吗

首先我需要一个函数,它接受一个dictionary参数,然后返回与最大值关联的键。这就是我尝试过的:

def findKeyForLargestValue(d):
    maxKey = ''
    maxValue = 0

    for name in d:
        for subName in d[name]:
            d = d[name][subName]

    if d > maxValue:
        maxKey = subName

    return maxKey

然后我需要创建一个函数,以字符串'name'和字典'overlaps'作为参数,必须返回读取名称列表,按照它们代表基因组序列的顺序:

`def findOrder(名称,重叠):

readOrder=[]`

我需要在另一个函数中使用findKeyForLargestValue(d)函数。我需要使用base case返回[name]和recursive case返回[name]+findOrder(nextName),其中nextName是与当前read(name)右端重叠最大的read的名称。你知道吗

谢谢你的帮助,因为我真的迷路了。甚至不确定findKeyForLargestValue的代码是否正确


Tags: 函数namein名称forread参数def
2条回答

首先,你的缩进不正确。你知道吗

def findKeyForLargestValue(d):
    for name in d:
        for subName in d[name]:
            d = d[name][subName]

            if d > maxValue: #Look at the indentation here
                 maxKey = subName #And here

    return maxKey

“简单”的答案是使用内置的^{}函数:

from operator import itemgetter
def findKeyForLargestValue(d):
    key,value = max(d.items(),key=itemgetter(1))
    return key

如注释中所述,如果内存确实是一个问题,并且您正在使用python2.x,那么您可以使用d.iteritems()而不是d.items()。我通常使用d.items(),因为它可以在python2.x和python3.x上工作而无需修改(在本文中),与d.items()相关的额外内存(相对于d.iteritems())几乎总是与我所做的任何工作无关。你知道吗


如果您对itemgetter感到困惑,请参见以下内容:

def func(seq):
    return seq[1]

#`func(x)` will return the same thing that `itemgetter(1)(x)` returns
# for any indexible object `x`

相关问题 更多 >