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

时间:2013-01-04 02:45:12

标签: python

我在这项任务中遇到了一些问题几个小时,我只是坚持做什么。

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

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'和一个字典'重叠'作为参数,它必须返回一个读取名称列表,它们代表基因组序列:

`def findOrder(name,overlapps):

readOrder = []`

我需要在其他函数中使用函数findKeyForLargestValue(d)。我需要使用应该返回[name]的基本情况和应该返回[name] + findOrder(nextName)的递归情况,其中nextName是与当前读取(名称)右端重叠最大的读取的名称

任何帮助都表示赞赏,因为我真的迷路了。甚至不确定findKeyForLargestValue的代码是否正确

2 个答案:

答案 0 :(得分:2)

“简单”的答案是使用内置max函数:

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`

答案 1 :(得分:0)

首先,你的缩进不正确。

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