我正在尝试编写一些代码,这些代码可以对列表中的元素求和,如下例所示:
list[(a,b,1),(c,d,2),(e,f,3)]
我想要做的是将此列表中的数字相加。这种名单的名称是什么?
希望你能帮助我。
答案 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))
如果数字元素位于已定义的索引处(如示例中所示),则可以执行
>>> 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)
简洁明了,对未来你来说非常可读。毫无疑问,这里发生了什么。