4

私は次のようなタプルのタプルを持っています: t = ((4, 3), (2, 9), (7, 2), ...)、ネストされた各タプル (つまりt[i][0]) の最初の要素は、繰り返しなしで 1 から 11 の範囲にすることができますが、必ずしも 1 から 11 の間のすべての整数が存在するわけではありません。

r次の方法で、に基づいてリスト(またはタプル)を作成したいt

結果のリストrの長さは正確に 11 です。の各インデックスについてjrある場合j + 1 === t[i][0]ir[j] = t[i][1]そうでない場合はr[j] = 0

これは、最初に初期化rしてから[0] * 11、ループしてtに代入t[i][1]することで実行できr[t[i][0] - 1]ます。

t = ((4, 3), (2, 9), (7, 2), (10, 1))
r = [0] * 11
for item in t:
    r[item[0] - 1] = item[1]

r = [0, 9, 0, 3, 0, 0, 2, 0, 0, 1, 0]

しかし、もっと効率的な方法 (おそらく機能的な方法) はありますか?

4

4 に答える 4

1

から辞書を作成し、ルックアップを使用しtて入力しますr

t = ((4, 3), (2, 9), (7, 2))
d_t = dict(t)
r = [0]*11
r = [d_t[i+1] if i + 1 in d_t else r[i] for i, x in enumerate(r)]
print r
[0, 9, 0, 3, 0, 0, 2, 0, 0, 0, 0]
于 2013-09-06T13:53:27.960 に答える