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循环,但是我正在寻找一种方法来操纵两个单独的列表并对其内容求和。也许以某种方式传递默认大小?
答案 0 :(得分:3)
我认为您只需要zip_longest
的fillvalue
功能:
[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)