python3对两个不同大小的列表求和,但没有重复

时间:2018-11-24 20:10:08

标签: python-3.x

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]

我希望对以上两个列表进行总计。由于他们是不同的长度清单,所以我只希望在折扣清单结束时才继续付款清单。总数与工资相同。

最近的是

>>>[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循环,但是我正在寻找一种方法来操纵两个单独的列表并对其内容求和。也许以某种方式传递默认大小?

2 个答案:

答案 0 :(得分:3)

我认为您只需要zip_longestfillvalue功能:

[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]

答案 1 :(得分:-1)

正如@Jacques所建议的那样,答案位于zip_longest中。如果您有兴趣,这是完整的代码:

from itertools import zip_longest

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 = [a + b for a, b in zip_longest(pay, rebate, fillvalue=0)]

print(total)