我有两个清单:
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的回答对我有用。
答案 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_bres.items()
例如:
ret_a = [t[1] for t in res.items()]
ret_b = [t[0] for t in res.items()]