-1

この宿題を手伝ってください:

makeA({0:1、2:1、4:2、6:1、9:1})

出力は次のようになります。

[1, 0, 1, 0, 2, 0, 1, 0, 0, 1]
4

2 に答える 2

5

リスト内包表記を試してください:

def makeA(d, default=0):
    """Converts a dictionary to a list. Pads with a default element

    Examples:

    >>> makeA({0: 1, 2: 1, 4: 2, 6: 1, 9: 1})
    [1, 0, 1, 0, 2, 0, 1, 0, 0, 1]

    >>> makeA({3: 'kos'},'')
    ['', '', '', 'kos']

    """
    maxElem = max(d)
    return [d.get(x, default) for x in range(maxElem+1)]

関数本体の最初の行は、dict 内の最大キーを見つけます (dictオブジェクトは反復処理時にキーを生成するため)。最大キーが 5 の場合、6 つの要素 [0..6] の配列が必要になります。

最後の行では、 sequence に対してリスト内包表記を使用し、0 .. maxElemこのシーケンスの各値に対して、このキーに の値を割り当てるか、d存在しない場合は 0 を割り当てます。

于 2012-06-27T09:47:33.883 に答える
1

はい、リスト内包表記でデフォルト値を実行できます。しかし、defaultdictクラスに任せる方が良いスタイルだと思います。そして、あなたはより読みやすいコードを起動することができます!! :-)

from collections import defaultdict

def makeA(d):
    dd = defaultdict(int, d)
    return [dd[n] for n in range(10)]


print makeA({0: 1, 2: 1, 4: 2, 6: 1, 9: 1})
于 2012-06-27T10:55:17.253 に答える