Python -用算术函数迭代2个列表



我有两个python列表,stock_level跟踪库存数量和所需指示stock_level创建每个产品所需的每个项目的数量。

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

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

编辑:只有当stock_level中的所有值都大于所需的时,才能制作产品。如果

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

不应该制造任何产品,因为stock_level中的第一个元素小于中的第一个元素。只有当stock_level中的值大于中所需的相应元素时,才应该制作产品

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

您的代码正在嵌套循环,但您需要并行地遍历两个列表。最后你会得到一个无限循环。

虽然压缩数组是最好的选择,但在这里找到一个使用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]

编辑后更新,如果我明白了。问题仍然是嵌套循环和使用的逻辑本身。要理解下面的实现,请深入文档:

  • zip
  • 列表理解

这是一个可能的实现:

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]

您可以使用zip()一起遍历两个列表。比如[max(a-b,0) for a,b in zip(l1, l2)]

试试这个。为添加的项目创建一个新列表是一个好主意,这样我们可以减少实现这一目标的步骤。

stock_level = [70, 2, 20 , 20] 
required = [20, 20, 20, 20]
new_stock_level = []
for i, x in enumerate(required):
y = stock_level[i]
made = y - x
if made <= 0:
print("Insufficient")
else:
# stock_leve minus required   
new_stock_level.append(made)
print("Product created")
print(new_stock_level, "nNumber of product created: {}".format(len(new_stock_level)))

最新更新