Python,我们如何用一种特定的格式连接两个列表,然后像元素一样求和?

2024-05-15 07:53:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个这样简化的列表,元素是个位数,请想象alist中的每个元素都是一个电话号码,blist中的每个元素都代表他们通话的秒数。我不确定这是否有区别,但我希望尽可能具体:

alist = [1,4,1,2,1]
blist = [6,7,8,9,5]

我想对blist中的元素求和,它们在alist中有相同的int,也必须按照alist的数字顺序。输出应如下所示:

clist = [19,9,7]

我试过使用:

clist = [a + b for a, b in zip(alist, blist)]

把这些单子组合起来,然后可能再求和,但这似乎变得更加困难。有更简单的方法吗?你知道吗


Tags: 元素列表顺序电话号码代表数字int想象
3条回答
from collections import OrderedDict

alist = [1,4,1,2,1]
blist = [6,7,8,9,5]

# insert keys in sorted order
d = OrderedDict()
for key in sorted(set(alist)):
    d[key] = 0

# sum items
for a,b in zip(alist, blist):
    d[a] += b

# final result
clist = list(d.values())  # produces [19, 9, 7]

你可以使用很棒的计数器类!你知道吗

from collections import Counter

alist = [1,4,1,2,1]
blist = [6,7,8,9,5]
c = Counter()
for a,b in zip(alist, blist):
    c[a] += b
clist =  [v for k, v in sorted(c.items())]
print clist

我认为这是最好的工具

下面是一个使用字典将元素从alist映射到blist对应元素之和的想法。你知道吗

>>> alist = [1,4,1,2,1]
>>> blist = [6,7,8,9,5]
>>> d = {}
>>> for a,b in zip(alist, blist):
...     d[a] = d.get(a, 0) + b
... 
>>> [d[x] for x in sorted(d)]
[19, 9, 7]

相关问题 更多 >