我正在尝试从总库存中减去已售出的库存,但是使用此代码,它会从列表A中的每个值中减去列表B中的每个值。
我希望从列表A中的对应值中减去列表B中的对应值,然后移至下一组数字,而不是从列表A中的每个值中减去列表B中的每个值。
我不确定如何修改我的代码,如何实现?
for s in stocks:
for q in quantities:
print(float(s) - float(q))
我想要的东西:
stock: [10, 20, 30]
quantities: [2, 3, 4]
output: 8, 17, 26
正在发生的事情:
stock: [10, 20, 30]
quantities: [2, 3, 4]
output: 8, 7, 6, 18, 17, 16, 28, 27, 26
答案 0 :(得分:2)
对zip
使用列表理解:
print([int(x) - int(y) for x, y in zip(stock, quantities)])
输出:
[8, 17, 26]
或者如果您想循环:
for x, y in zip(stock, quantities):
print(int(x) - int(y))
输出:
8
17
26
这里是docs:
返回一个元组列表,其中第i个元组包含每个参数序列或可迭代对象中的第i个元素。
或使用map
:
print(list(map(lambda x, y: int(x) - int(y), stock, quantities)))
输出:
[8, 17, 26]
这里是docs:
将函数应用于可迭代的每个项目,并返回结果列表。 您的代码无法正常工作,因为您执行了以下操作:
10 - 2, 10 - 3, 10 - 4, 20 - 2
等...
因此,您要遍历stock
,并用quantities
中的每个值减去它,而不仅仅是相应的值。
答案 1 :(得分:0)
首先使用字典来存储数据会更好,但是对于您的用例,请尝试使用:
output = [int(stock[x]) - int(quantities[x]) for x, s in enumerate(stock)]