python列表中元素的总和

时间:2012-12-04 07:22:34

标签: python list sum

我正在尝试编写一些代码,这些代码可以对列表中的元素求和,如下例所示:

list[(a,b,1),(c,d,2),(e,f,3)]

我想要做的是将此列表中的数字相加。这种名单的名称是什么?

希望你能帮助我。

5 个答案:

答案 0 :(得分:3)

试试这个

它是一个元组列表,你需要遍历列表中的各个元素并提取值,一旦提取,你可以sum对它们进行

In [103]: l = [('a','b',1),('c','d',2),('e','f',3)]

In [104]: sum([x[2] for x in l])
Out[104]: 6

答案 1 :(得分:2)

给出一个列表,并假设你必须按照例子中给出的整数求和

foo = [('a','b',1),('c','d',2),('e','f',3)]

您可以执行以下操作

sum(e for e in itertools.chain(*foo) if isinstance(e, int))
  • 此处itertools.chain会使列表变得扁平化
  • isinstance检查元素是否是整数
  • 的实例
  • 仅对那些作为int
  • 实例的元素求和

如果数字元素位于已定义的索引处(如示例中所示),则可以执行

>>> zip(*foo)
[('a', 'c', 'e'), ('b', 'd', 'f'), (1, 2, 3)]
>>> sum(zip(*foo)[2])
6

答案 2 :(得分:0)

您可以使用func flatten()来解析嵌套列表,例如跟随列表     lst = [('a','b',(1,2)),('c','d',2),('e','f',3)]

def flatten(l):  
    for el in l:  
        if hasattr(el, "__iter__") and not isinstance(el, basestring):  
            for sub in flatten(el):  
                yield sub  
        else:  
            yield el 

print sum(e for e in flatten(lst) if isinstance(e, int))

答案 3 :(得分:0)

将迭代减少到单个值是为...创建的内置reduce函数:

In [1]: l = [("a", "b", 1), ("c", "d", 2), ("e", "f", 3)]

In [2]: reduce(lambda x,y: x + y[2], l, 0)
Out[2]: 6

因此您不需要显式迭代,reduce函数会为您完成。您既不需要导入其他模块。

答案 4 :(得分:0)

my_list = [('a','b',1),('c','d',2),('e','f',3)]

my_answer = sum(z for x,y,z in my_list)

简洁明了,对未来你来说非常可读。毫无疑问,这里发生了什么。