2013-05-22 105 views
0

內我有這樣一個列表:Python的乘法表

[(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)] 

我想借此0個元素從a和b,它們相乘,把它添加到一個總和變量。如果一個項目在一個或b缺失(在本例中[2]),那麼它會被表示爲0。

我的方法:

  1. 取兩個空列表的a_list和b_list。
  2. 迭代大列表並根據第一項('a'或'b')將項目放入相應列表中。
  3. 從兩個列表中選取基於相同索引的每個項目,將它們相乘並放入總和變量中。
  4. 繼續到列表的末尾。

但問題是我不能將0分配給不存在的索引(如[2])。任何解決方案或簡單的方法來做到這一點

+0

您期望的樣本數據的結果是什麼? – jamylak

+0

考慮使用'dict's而不是'list's作爲你的中間數據結構來存儲各種'a'和'b'索引的值。 – Amber

回答

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 
+0

謝謝,它的工作! – Jyotiska