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']
第二个代码:
```python
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']
同一个问题发这么多遍干什么
for是个迭代器,你用pop会干扰它的迭代过程
而while sandwich_orders,只要列表长度不为0就一直循环
跟过程无关
pop是后入先出
for是先入先出
所以第一段是从列表的第一个元素开始输出,但pop(0)弹出的是最后一个元素。导致输出第一个元素后,第三个元素就被pop掉了,只能输出2个元素。
而第二段是先pop取出栈顶元素,也就是从最后一个元素开始逐个弹出并输出,然后加入新的列表,就不会丢失元素了
你可以换个写法
for i,order in enumerate(sandwich_orders):
每次输出 i ,你就会发现他的指针移动方式了
而你的 pop 是针对数组的,pop(0) 就是弹出第一个,和循环没什么关系