Corben89 2023-03-09 17:12 采纳率: 25%
浏览 25

Python的两个代码为何不是输出同一个结果

Python的两个代码为何不是输出同一个结果,代码和结果如下:
第一个代码:

sandwich_orders = ['huotui', 'peigen', 'zhishi']
finished_sandwiches = []
 
for order in sandwich_orders:
    print(f"I made your {order} sandwich.")
    food = sandwich_orders.pop(0)
    finished_sandwiches.append(food)
 
print(sandwich_orders)
print(finished_sandwiches)

结果输出为:
I made your huotui sandwich.
I made your zhishi sandwich.
['zhishi']
['huotui', 'peigen']

第二个代码如下:

sandwich_orders = ['huotui', 'peigen', 'zhishi']
finished_sandwiches = []
 
while sandwich_orders:
    food = sandwich_orders.pop()
    print(f"I nade your {food} sandwich.")
    finished_sandwiches.append(food)
 
print(sandwich_orders)
print(finished_sandwiches)

输出结果如下:
结果输出为:
I nade your zhishi sandwich.
I nade your peigen sandwich.
I nade your huotui sandwich.
[]
['zhishi', 'peigen', 'huotui']

  • 写回答

4条回答 默认 最新

  • 於黾 2023-03-09 17:16
    关注

    for是个迭代器,你在迭代过程中修改了可迭代对象的长度,会导致迭代出错
    本来一开始order指向索引位置0的对象
    你将它pop出来了,位置是1的对象索引变成了0,索引是2的对象变成了1
    然后order指向1,迭代就结束了
    0位置的对象被跳过了

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月9日