2013-05-22 67 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