この宿題を手伝ってください:
makeA({0:1、2:1、4:2、6:1、9:1})
出力は次のようになります。
[1, 0, 1, 0, 2, 0, 1, 0, 0, 1]
この宿題を手伝ってください:
makeA({0:1、2:1、4:2、6:1、9:1})
出力は次のようになります。
[1, 0, 1, 0, 2, 0, 1, 0, 0, 1]
リスト内包表記を試してください:
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 を割り当てます。
はい、リスト内包表記でデフォルト値を実行できます。しかし、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})