繁体   English   中英

Python-在列表中添加元组的元素

[英]Python - Adding elements of a tuple in a list

如何在列表中添加元组的元素?

[(0.50421782178217822, 0.4822060104027705), (0.4375, 0.6666666666666666), (0.375, 0.4642857142857143), (0.26666666666666666, 0.16666666666666666)]

例如:

=> 0.50421 ... + 0.4375 + ... => 0.4822 ... + 0.666 + ...

它应该返回一个元组。

例如,(第0个元素总和,第1个元素总和)。

麻烦的是方括号。

我被困在这里,但不知道如何添加元组。

[(x,y) for (x,y) in dict.itervalues()]
>>> map(sum, zip(*mylist))
[1.5833844884488448, 1.779825058021818]

您可以使用内置的reduce函数来实现。

myList = [(0.50421782178217822, 0.4822060104027705), (0.4375, 0.6666666666666666), (0.375, 0.4642857142857143), (0.26666666666666666, 0.16666666666666666)]
reduce(lambda x,y: (x[0]+y[0], x[1]+y[1]), myList)

(1.5833844884488448, 1.779825058021818)

或带有两个聚合变量。

s1,s2 = 0.0, 0.0
for x,y in myList:
   s1+=x
   s2+=y

如果函数编程不是您的事,那么我决定给出另一个答案。

我们可以做的是将问题视为两个不同的问题。 将每个元组的第一个条目相加,然后将每个元组的第二个条目相加。 然后将它们合并为一个元组。 好的,听起来还不错。

让我们从对一个1元组的列表求和开始,那只是一个列表。 总结起来很容易。

>>> aList = [1,2,3,4,5]
>>> theSum = sum(aList)
>>> print(theSum)
15

嗯,还算不错,这是有道理的。

现在,如果我们有一个2元组(或n元组)的列表,并且只想要第一个条目的总和。 好吧,我们求和时可以忽略其余的条目。

>>> aList = [(1,10),(2,10),(3,10),(4,10),(5,10)]
>>> theSum = sum([firstEntry for firstEntry,secondEntry in aList])
>>> print(theSum)
15

还不错 现在,如果想更清楚一点,我们可以清理第二行。

>>> theSum = sum(firstEntry for firstEntry,_ in aList)

我所做的是将方括号括起来,并为未使用的方法添加下划线。 有人在阅读代码后可以看到,很明显我们不在乎第二项。

现在这里发生了什么,我们正在做的是执行常规的“ for in”循环,但是我们的变量现在是一个名称元组本身,非常方便。

对于问题的答案

>>> aList = [(0.50421782178217822, 0.4822060104027705), (0.4375, 0.6666666666666666), (0.375, 0.4642857142857143), (0.26666666666666666, 0.16666666666666666)]
>>> theSum = (sum(firstEntry for firstEntry,_ in aList),sum(secondEntry for _,secondEntry in aList))
>>> print(theSum)
(1.5833844884488448, 1.779825058021818)

我们完成了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM