本问题已经有最佳答案,请猛点这里访问。
我正在迭代Python中的元素列表,对其执行一些操作,然后在满足某些条件时删除它们。
for element in somelist:
do_action(element)
if check(element):
remove_element_from_list
我应该用什么来代替删除元素?我也看到过类似的问题,但是请注意,要为所有元素执行的Do-Action部分的存在,从而消除了使用过滤器的解决方案。
你不能把它分为两个步骤,即所有元素都做这个动作,然后删除元素吗?
在for循环中迭代某个元素时,不应该从列表中删除该元素。您可以使用while循环。或者,记录要删除的所有元素的索引,然后在迭代完成后删除它们。
全部:我需要在适当的地方修改列表,没有副本。实际上,该列表被传递给一个函数,并且该函数需要修改该列表。
@斯克朗奇,仍然有可能(更好地)遍历列表,然后将其内容替换为第二遍。这就是我在回答中使用[:]的原因。
@你的第一句话是站不住脚的——看我的答案。
@约翰:@scrontch想在for循环中删除,这是一个无可争辩的坏主意。在您的示例中,您使用了while循环,这是我在注释中为您使用while循环的确切方式提出的建议。
@史考奇:我你还没有接受答案。我,你要么批评答案,要么接受答案。它将帮助那些发布了答案的人,它将使你在未来更容易得到答案。
您总是可以迭代列表的副本,这样您就可以自由