为什么我的列表跳过了某个特定的值?

2024-05-23 17:29:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以在同时弹出时进行迭代吗?你知道吗

def process_shipments(shipments_list):
next_day_orders = []
bamboo_shoots = 20
bamboo_leaves = 15
for order in shipments_list:
    if order[1] < 20 and order[2] < 15 and bamboo_shoots > 0 and bamboo_leaves > 0:
        bamboo_shoots -= order[1]
        bamboo_leaves -= order[2]
        total_cost = ((5*order[1])+(2*order[2]))
        print (order[0], "-", "$",total_cost)
    else:
        next_day_orders += order
shipments_delete[:]
return next_day_orders

我在问两种版本是否都可以。我在努力优化效率。你知道吗


Tags: andfordeforderprocesslistnexttotal
2条回答

您正在迭代循环中修改shipments_list。不要在循环索引出错时这样做。你知道吗

您正在迭代过程中从列表中删除项。这几乎总是给你奇怪的结果。根据您的注释,您只希望shipments_list在结尾处为空,因此请在结尾处而不是在循环的中间执行此操作:

for order in shipments_list:
    if order[1] <= 20 and order[2] <= 15 and bamboo_shoots >= 0 and bamboo_leaves >= 0:
        bamboo_shoots -= order[1]
        bamboo_leaves -= order[2]
        total_cost = ((5*order[1])+(2*order[2]))
        print (order[0], "-", "$",total_cost)
    else:
        next_day_orders += order

del shipments_list[:]   # <  empty the list here
return next_day_orders

为什么不从循环中的列表中删除项?考虑这个例子:

>>> x = [0, 1, 2, 3, 4, 5]
>>> for y in x:
...     print y
...     x.remove(y)
...
0
2
4
>>>

只迭代偶数个元素。第一个元素是0。但是在这个循环中,0被删除了,所以现在第一个元素是1。下一个循环跳到第二个元素,现在是21从未处理过!35也是如此。你知道吗

相关问题 更多 >