如何在python中对与列表中另一个列表的元素相对应的列表元素求和

时间:2015-07-17 15:52:37

标签: python

我有两个清单:

a=[25,23,18,28]

b=[1,2,2,3]

我想将a中的相应值与b中的相似值相加,所以它看起来像这样:

return_a=(25,41,28)
return_b=(1,2,3)

很抱歉这个混乱。窃取JPeroutek的澄清:我认为他只想在return_b中存在唯一的值。 a中的值与b中的值相对应。如果您在b中有重复,则可以将相应的a值相加。

Nathan Bartley的回答对我有用。

1 个答案:

答案 0 :(得分:0)

这样做的好方法是使用字典。逻辑非常像JPeroutek所描述的。您将浏览列表b,将相应的数字存储在列表a中,如果您遇到b中已经看过的值,则在其中添加新数字。您可以尝试这样的方法来生成它:

res = {}
for ix in xrange(len(b)):
    cur_b = b[ix] # grab the next number in b
    cur_a = a[ix] # grab the corresponding number in a
    try: # if we've seen cur_b before then we can add cur_a to it
        res[cur_b] += cur_a 
    except KeyError: # otherwise we've never seen cur_b before so we set it to cur_a
        res[cur_b] = cur_a

如果尝试&除了没有意义,你可以重写这四行看起来像这样

if cur_b in res:  # this asks if cur_b is in the set of keys of res
    res[cur_b] += cur_a
else:
    res[cur_b] = cur_a

这将导致字典如下所示:

{(1, 25), (2, 41), (3, 28)}

请务必注意,字典可能无法保留您想要的顺序。例如:

b = [3, 3, 2, 1]
a = [12, 4, 6, 6]

会导致

{(1, 6), (2, 6), (3, 15)}

如果订购很重要,这将对下一步造成问题。

您可以通过弄乱

的结果将字典拆分为ret_a和ret_b
res.items()

例如:

ret_a = [t[1] for t in res.items()]
ret_b = [t[0] for t in res.items()]