首页 > 解决方案 > Python - 使用算术函数遍历 2 个列表

问题描述

我有 2 个 python 列表stock_level来跟踪库存数量,并需要指示创建每个产品所需的stock_level中每个项目的数量。

stock_level = [70, 20, 20 , 20] 
required = [20, 20, 20, 20]

如何遍历 2 个列表以找出可以制造多少产品以及制造产品后剩余的库存,即在给定上述值的情况下,只能制造 1 个产品,stock_level最终应为 [50, 0, 0, 0]

编辑:只有在stock_level中的所有值都大于required 时才能生产产品。如果,

stock_level = [20, 20, 20, 20]
required = [70, 20, 20, 20]

由于stock_level中的第一个元素小于required中的第一个元素,因此不应生产任何产品。仅当stock_level中的值大于required中的相应元素时,才应制作产品。

stock_level = [70, 20, 20, 20]
required = [20, 20, 20, 20]

在这个例子中,应该只生产一种产品,因为在第一次运行之后,stock_level将变为 [50, 0, 0, 0] 并且在stock_level的第 2 到第 4 个元素中没有足够的库存来生产另一种产品。

我想出了这样的事情。

made = 0
for x in required:
    for y in stock_level:
        while True:
            if x > y:
                print("Insufficient")
                break
            else:
                # stock_leve minus required
                print("Product created")
            made += 1

标签: pythonlistloopsfor-loopwhile-loop

解决方案


您的代码正在嵌套循环,但您需要同时遍历这两个列表。此外,您最终会陷入无限循环。

虽然压缩数组是最好的选择,但在这里找到使用enumerate的调整版本,它应该可以帮助您理解。

没有管理库存不足的情况。

stock_level = [70, 20, 20 , 20] 
required = [20, 20, 20, 20]

for i, x in enumerate(required):
    y = stock_level[i]
    if x > y:
        print("Insufficient")
    else:
        # stock_leve minus required
        print("Product created")
        made = y - x
        stock_level[i] = made

stock_level #=> [50, 0, 0, 0]

编辑后更新,如果我明白了。问题仍然是嵌套循环和使用的逻辑本身。

要了解以下实现,请深入研究文档:

这是一个可能的实现:

stock_level = [70, 40, 40, 50] 
required = [20, 20, 20, 20]

tmp = zip(stock_level, required)
tmp = list(zip(stock_level, required))
makeable = 0

while True:
    update_make = tmp
    tmp = [ [stk - req, req] for stk, req in tmp ]
    can_be_made = all([stk >= 0 for stk, _ in tmp])
    if can_be_made:
        makeable += 1
    else:
        break
        
print(makeable) #=> 2
print(update_make) #=> [[30, 20], [0, 20], [0, 20], [10, 20]]
actual_stock_level = [stk for stk, req in update_make]
print(actual_stock_level) #=> [30, 0, 0, 10]

推荐阅读