(请注意,虽然这被标记为一个不同问题的副本,但我没有看到我的问题,更不用说那个答案了。我意识到,在某种程度上,他们可能是同样的问题,因为版主选择了但是,对于没有那种深度理解的所有用户,因此不得不提出这个问题,我认为我的问题和给出的答案更加平易近人。)
这是一个学习问题 - 只是试图了解列表中的pop和for循环。这似乎是基本的,以前必须得到回答,但我不能寻找正确的事情。
我做了一个与项目和没有项目的ta da列表。然后我的for循环应该从待办事项列表中弹出每个项目并将其附加到ta da列表。但是,即使我的列表有三个项目,也只有两个会弹出并追加。
以下是代码:
to_do_list=['buttons','drawers','call mom']
ta_da_list=[]
print("To do: "+str(len(to_do_list))+" items")
print("Done: "+str(len(ta_da_list))+" items")
for item in to_do_list:
done=to_do_list.pop()
ta_da_list.append(done)
print("Woo hoo! "+done.title()+ " is done!")
print("Look at all I did today! \n\t"+str(ta_da_list))
print("I still have this to do: \n\t"+str(to_do_list))
print("To do: "+str(len(to_do_list))+" items")
print("Done: "+str(len(ta_da_list))+" items")
done=to_do_list.pop() #testing that I can pop the last item when it's not in
a for loop
print(done) #yup, it popped
这是输出:
To do: 3 items
Done: 0 items
Woo hoo! Call Mom is done!
Woo hoo! Drawers is done!
Look at all I did today!
['call mom', 'drawers']
I still have this to do:
['buttons']
To do: 1 items
Done: 2 items
buttons
我预计还有1个" Woo hoo",一个空的to_do_list和ta_da_list中的3个项目。为什么for循环在处理列表中的最后一项之前就停止了?
在Windows上运行Python 3.
答案 0 :(得分:3)
当您使用for item in to_do_list:
对列表进行迭代时,您不应该修改列表。见strange result when removing item from a list
相反,您可以使用while
循环:
while to_do_list:
done = to_do_list.pop()
ta_da_list.append(done)
print("Woo hoo! "+done.title()+ " is done!")
或者您可以使用range()
循环。
for _ in range(len(to_do_list)):
done = to_do_list.pop()
ta_da_list.append(done)
print("Woo hoo! "+done.title()+ " is done!")
这决定了循环首次启动时范围的限制,因此对len(to_do_list)
的更改不会影响循环。