列表中的Python乘法

列表中的Python乘法,python,list,Python,List,我有这样一份清单: [(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中缺少一项(在本例中为a[2]),则表示为0 我的做法: 取两个空列表a_列表和b_列表 迭代大列表,根据第一项('a'或'b'

我有这样一份清单:

[(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中缺少一项(在本例中为a[2]),则表示为0

我的做法:

  • 取两个空列表a_列表和b_列表
  • 迭代大列表,根据第一项('a'或'b')将该项放入相应的列表中
  • 根据两个列表中相同的索引选择每个项目,将它们相乘,并将其放入sum变量中
  • 继续到列表的末尾

  • 但问题是我无法将0分配给不存在的索引(如[2])。有什么解决方案或更简单的方法可以做到这一点吗?

    考虑使用
    dict
    s而不是
    list
    s作为中间数据结构来存储各种
    a
    b
    索引的值。您期望的样本数据结果是什么?
    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