Python:如何仅从for循环的列表中减去相应的值

时间:2019-07-04 03:11:13

标签: python list loops csv subtraction

我正在尝试从总库存中减去已售出的库存,但是使用此代码,它会从列表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

2 个答案:

答案 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)]