首页 > 解决方案 > python3对两个不同大小的列表求和但不重复

问题描述

pay = [1120, 1176, 1232, 1288, 1344, 1400, 1456, 1512, 1568, 1624, 1680, 1736, 1792, 1848, 1904, 1960, 2016, 2072, 2128, 2184, 2240]

rebate = [260.0, 218.0, 176.0, 134.0, 92.0, 50.0, 8.0]

我想把上面的两个列表加起来。由于它们是不同长度的列表,我只想要它在回扣列表结束时它只是继续支付列表。Total 与 pay 的长度相同。

我最接近的是

>>>[x+y for x,y in zip(pay,rebate)]
[1380.0, 1394.0, 1408.0, 1422.0, 1436.0, 1450.0, 1464.0]

>>>[x+y for x,y in zip_longest(pay,rebate)]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <listcomp>

也试过

total = map(lambda x,y: x+y, pay,rebate)
print(list(total))
[1380.0, 1394.0, 1408.0, 1422.0, 1436.0, 1450.0, 1464.0]

但它强制相同大小的列表。一旦添加回扣完成,我只想留下工资。类似的问题有同样的问题;要么重复较小的列表,要么只返回它们的总和但受最短列表的限制。我想获取完整列表

我可以制作一个常规的 for 循环来构建图表,但我正在寻找一种方法来操作两个单独的列表并将它们的内容相加。也许以某种方式传递默认大小?

标签: python-3.x

解决方案


我认为您只需要以下fillvalue功能zip_longest

[a + b for a, b in zip_longest(pay, rebate, fillvalue=0)]

给予

[1380.0, 1394.0, 1408.0, 1422.0, 1436.0, 1450.0, 1464.0, 1512,
 1568, 1624, 1680, 1736, 1792, 1848, 1904, 1960, 2016, 2072,
 2128, 2184, 2240]

推荐阅读