【问题标题】:Python for i in arr : arr.remove(i) function [duplicate]Python for i in arr:arr.remove(i) 函数 [重复]
【发布时间】:2022-01-07 05:48:06
【问题描述】:

Pic

我在 python 中创建了“eratosthenes 筛子”,我发现在操作“for”循环时使用“remove”只会删除奇数(或偶数索引元素)。

我认为它会删除“arr”列表中的所有内容,并删除其元素本身。

谁能解释一下?

这是代码

arr = list(range(1, 11))
for i in arr:
    arr.remove(i)
print(arr)

附言抱歉语法不好。

【问题讨论】:

  • 作为对那些投票决定关闭为 dup 的人的说明,这个案例与通常的案例有点不同,因为他们真的想清空整个列表,而不仅仅是几个元素。跨度>
  • @TimRoberts 这有关系吗?问题是一样的。
  • 但是需要一个不同的答案。
  • @TimRoberts 我不这么认为。并不真地。除非你想象出一个实际上并不存在的额外问题(“我怎样才能实现我想要的?”)。
  • @TimRoberts 我的意思是,即使是您自己的“答案”也只有“答案”与 “内部指针都搞砸了” (其余的都是没有解决的绒毛问题)。你可以在其他问题上说同样的话(部分原因是它太模糊/空洞)。

标签: python loops for-loop


【解决方案1】:

您不应该在迭代列表时修改它。内部指针都搞砸了。在这种情况下,要在不分配新对象的情况下清除列表,您可以这样做:

arr[:] = []

【讨论】:

  • 我想我应该在发布此建议时说“不应该”,这大约每周发生两次。
  • 感谢您的回复。我不知道如果我修改迭代列表会发生什么。顺便问一下,我可以使用arr = []这个代码来清除列表吗?使用切片器有什么不同吗?
  • 有很大的不同,但仅在某些情况下才重要。使用切片表示法修改现有的列表对象。使用分配创建一个新的列表对象并丢弃旧的。例如,如果arr 是函数中的参数,那么使用赋值意味着您现在正在使用不同的列表对象。调用者不会看到您的更改。这是好是坏取决于你的设计。
猜你喜欢
  • 1970-01-01
  • 2020-10-20
  • 2023-03-29
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 2015-01-16
  • 1970-01-01
相关资源
最近更新 更多