0

次のようなリストがあります。

[(u'a', 0, 25), (u'a', 1, 11), (u'a', 3, 60), (u'a', 4, 89), (u'b', 0, 18), 
(u'b', 1, 76), (u'b', 2, 52), (u'b', 3, 75), (u'b', 4, 46)]

a と b の両方から 0 番目の要素を取得し、それらを乗算して、合計変数に追加したいと思います。a または b で 1 つの項目が欠落している場合 (この例では a[2])、それは 0 として示されます。

私のアプローチ:

  1. 空のリスト a_list と b_list を 2 つ取ります。
  2. 大きなリストを繰り返し処理し、最初の項目 (「a」または「b」) に基づいて、項目をそれぞれのリストに入れます。
  3. 両方のリストから同じインデックスに基づいて各項目を選択し、それらを乗算して合計変数に入れます。
  4. リストの最後まで続けます。

しかし、問題は、存在しないインデックスに 0 を割り当てることができないことです (a[2] など)。これを行うための解決策または簡単な方法はありますか?

4

1 に答える 1

1
data = [(u'a', 0, 25), (u'a', 1, 11), (u'a', 3, 60), (u'a', 4, 89), (u'b', 0, 18),
(u'b', 1, 76), (u'b', 2, 52), (u'b', 3, 75), (u'b', 4, 46)]

d = {'a': {}, 'b': {}}
for x, y, z in data:
    d[x][y] = z    

>>> sum(d['a'].get(k, 0) * d['b'].get(k, 0)
        for k in d['a'].viewkeys() | d['b'].viewkeys())
9880
于 2013-05-22T06:17:40.813 に答える