1

このタスクで数時間トラブルが発生しました。

まず、辞書引数を受け取り、最大値に関連付けられたキーを返す関数が必要です。これは私が試したことです:

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) を使用する必要があります。[name] を返す基本ケースと、[name] + findOrder(nextName) を返す再帰ケースを使用する必要があります。nextName は、現在の読み取り (名前) の右端に最大の重複がある読み取りの名前です。 .

私は本当に迷っているので、助けていただければ幸いです。findKeyForLargestValue のコードが正しいかどうかさえわからない

4

2 に答える 2

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`
于 2013-01-04T02:55:29.947 に答える
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
于 2013-01-04T02:51:35.047 に答える