【问题标题】:Python: How to subtract only corresponding values from lists in a for Loop [duplicate]Python:如何从for循环中的列表中仅减去相应的值[重复]
【发布时间】:2019-07-04 03:11:13
【问题描述】:

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

【问题讨论】:

    标签: python list loops csv subtraction


    【解决方案1】:

    使用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 中的每个值减去它,而不仅仅是相应的值。

    【讨论】:

    • 感谢您的回复,我试过了,但它似乎不起作用。 x 和 y 都是字符串,所以它们不能被减去,使用 print(float(x) - float(y)) 似乎也不起作用,因为它打印出 '2.0' 和 '-6.0'
    • @18649626842568 现在试试,我编辑了我的答案,如果有效,请接受它
    【解决方案2】:

    首先使用字典存储数据会更好,但对于您的用例,请尝试使用:

    output = [int(stock[x]) - int(quantities[x]) for x, s in enumerate(stock)]
    

    【讨论】:

    • 为什么要使用enumerate,只需使用range
    • Enumerate 让我们获取列表的索引。 Range 也可以,但您无法访问每个索引处的值。
    • 我知道你的意思,但目前你没有使用列表的值,只有索引
    • 感谢回复,x 和 y 都是字符串,我不能减去它们
    • 用编辑试试吧。
    猜你喜欢
    • 2022-11-08
    • 2021-06-29
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2020-10-18
    • 2020-11-22
    相关资源
    最近更新 更多