0

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

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

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

希望您能够帮助我。

4

5 回答 5

3

给定一个列表,并假设您必须对示例中给出的整数求和

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

您可以执行以下操作

sum(e for e in itertools.chain(*foo) if isinstance(e, int))

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

>>> zip(*foo)
[('a', 'c', 'e'), ('b', 'd', 'f'), (1, 2, 3)]
>>> sum(zip(*foo)[2])
6
于 2012-12-04T07:26:52.110 回答
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
于 2012-12-04T07:27:17.353 回答
0

您可以使用 func flatten() 解析嵌套列表,如 follow list 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))
于 2012-12-04T07:35:42.023 回答
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函数会为您完成。您也不需要导入其他模块。

于 2012-12-04T09:16:57.307 回答
0
my_list = [('a','b',1),('c','d',2),('e','f',3)]

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

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

于 2012-12-04T12:21:51.753 回答